【问题标题】:Sample one column of dataframe and pick out values beside sampled output采样一列数据框并在采样输出旁边挑选出值
【发布时间】:2020-03-07 18:49:04
【问题描述】:

我需要按一列对数据框进行采样,然后获取采样值和所选值旁边的值以进行进一步计算。

例如,下面是一些代码。假设我在第一列(未使用)上采样,它选择了一个值。然后我想输出该值和一个两列(结转),并在同一行中..

dat <- data.frame(cbind(rnorm(30,600,sd=100),rnorm(30,300,sd=50),rnorm(30,200,sd=50),rnorm(30,200,sd=200)))
colnames(dat) <- c("unused","deduct","carryover","used")
unused <- dat$unused

  for (i in 1:10) {
    unused[i] <-matrix(sample(unused,size=1,replace=TRUE))
  }

【问题讨论】:

  • 我很难理解你想要做什么。您想从 data.frame 中采样行(或部分行)吗?根据您的示例数据,您能否举例说明您的预期输出是什么样的?
  • 假设我对未使用的样本进行了采样,它从第 21 行中选择了一个值。然后我想从第 21 行(本来在第 3 列)获取该值和结转值,即, 采样值取自同一行。
  • 我们可以首先从行号池(与您的 data.frame 中的行数一样多)中采样。然后我们将它们用作行索引并选择行和仅感兴趣的两列作为新数据框
  • 所以,不是按列采样,而是按行采样并输出整行,然后提取我需要的内容。

标签: r for-loop random


【解决方案1】:
  dat <- data.frame(cbind(rnorm(30,600,sd=100),rnorm(30,300,sd=50),rnorm(30,200,sd=50),rnorm(30,200,sd=200)))
  colnames(dat) <- c("unused","deduct","carryover","used")

  set.seed(1)
  subsample <- dat[sample(seq_along(dat[, 1]), size = 10), c("unused", "carryover")]

subsample 现在是:

       unused carryover
  25 696.4313  120.7247
  4  541.7930  299.9415
  7  621.7899  194.5108
  1  383.2561  166.8942
  2  555.0840  210.4745
  23 509.4725  179.7150
  11 716.6414  214.2963
  14 531.1205  227.8825
  18 496.7440  140.7691
  19 588.5641  142.7861

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-12-28
    • 2018-10-09
    • 2019-04-15
    • 2020-01-12
    • 1970-01-01
    • 2019-02-25
    • 2019-01-19
    相关资源
    最近更新 更多