【问题标题】:Sampling from an R Dataframe [duplicate]从 R 数据帧中采样 [重复]
【发布时间】:2020-07-09 14:38:28
【问题描述】:

我有一个包含各种房地产列表的数据框,类似于以下内容。

ADDRESS      PRICE     ZIP     ...
123 Main St  400,000   45678
23 Green Ln  380,000   45670
29 Green Ln  385,000   45670
...

我想为测试数据集执行分层随机样本。换句话说,我想从每个邮政编码中提取约 30% 的条目,并将它们分成一个新的数据集。我不熟悉 R 数据帧,那么我将如何执行这样的操作?

我已经像这样使用了示例函数

sample(c(1:103), size=31, replace = F)

但是如何将这些特定的行放入新的数据框中?

8  85   5  83  66  46  39  75 101  94  10  68  63  74  22  86  42
59  52  97  62  11  44  96  88  28   9  36   2  78  49

【问题讨论】:

  • 可以使用sample()函数。

标签: r dataframe sampling


【解决方案1】:

对于分层抽样,您可以使用 caret 包中的 createDataPartition 函数,方法是插入您想要分层的变量(在您的情况下为 ZIP)。通过使用[[1]],您可以选择列表的第一个元素,其中包含拆分所需的行索引。然后,通过仅选择train_index 给出的行来对原始数据集进行子集化

train_index <- caret::createDataPartition(your_data$ZIP, p = 0.7)[[1]]
train_data <- your_data[train_index,]
test_data <- your_data[-train_index,]

【讨论】:

    【解决方案2】:

    我相信dplyr 的解决方案是这样的:

    train_set <- df %>%
      group_by(ZIP) %>%
      sample_frac(0.3)
    

    它将返回一个数据框,其中包含每个 ZIP 组的样本值

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-09-16
      • 1970-01-01
      • 2017-09-19
      • 2019-09-18
      • 2018-08-26
      • 1970-01-01
      • 2017-06-01
      • 1970-01-01
      相关资源
      最近更新 更多