我有以下数据集
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,但它并没有谈论比例。
答案 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
)。