从 R 数据帧中采样

Sampling from an R Dataframe

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

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

对于分层抽样,您可以使用 caret 包中的 createDataPartition 函数,方法是插入要根据其进行分层的变量(在您的情况下为 ZIP)。通过使用 [[1]] 你 select 列表的第一个元素包含拆分所需的行索引。之后,您仅通过 select 对原始数据集进行子集化 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,]

我认为 dplyr 解决方案是这个:

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

它将return一个包含每个 ZIP 组样本值的数据框