从data.frame中抽样同时控制一定比例[分层抽样]

时间:2015-03-31 04:48:12

标签: r sampling

我有以下数据集

id1<-c(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20)
status<-c(1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2)
df<-data.frame(id1,status)

df中,40%的观察结果status为“2”。 我正在寻找一个功能,从df中提取10个观测样本,同时保持上述比例。

我已经看过stratified random sampling from data frame in R,但它并没有谈论比例。

1 个答案:

答案 0 :(得分:4)

您可以尝试我的&#34; splitstackshape&#34;中的stratified功能。包:

library(splitstackshape)
stratified(df, "status", 10/nrow(df))
#     id1 status
#  1:   5      1
#  2:  12      1
#  3:   2      1
#  4:   1      1
#  5:   6      1
#  6:   9      1
#  7:  16      2
#  8:  17      2
#  9:  18      2
# 10:  15      2

或者,使用来自&#34; dplyr&#34;:

sample_frac
library(dplyr)

df %>%
  group_by(status) %>%
  sample_frac(10/nrow(df))

这两个都会采用与原始分组变量成比例的分层样本(因此使用10/nrow(df),或等效地0.5)。