从 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 组样本值的数据框
我有一个数据框,其中包含类似于以下内容的各种房地产列表。
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 组样本值的数据框