我想根据不同的概率从数据帧中的3组数据(行)中进行采样。 例如,数据看起来像
group<-c(1,1,1,2,2,3,3)
var1<-c('aa','ab','ac','ba','bb','ca','ce')
var2<-c('aaa','aba','aca','baa','bba','caa','cba')
var3<-c('aab','abb','acb','bab','bbb','cab','ceb')
data<-data.frame(group,var1,var2,var3)
现在我想基于不同的概率从整个数据帧(获取行)中抽样(例如,总共5个)(对于组== 1 - > 0.5,组== 2 - > 0.4,组== 3 - &gt; 0.1)
有谁知道用R解决这个问题?非常感谢帮助。 干杯
...
答案 0 :(得分:2)
通过by
或split
可能有更直接的方法,可能有比我使用的更好的变量名称,但这应该有效:
set.seed(4)
probs <- c(0.5, 0.4, 0.1)
grp_1Row_prob <- probs / table(data$group)
row_probs <- rep(grp_1Row_prob, times = table(data$group))
row_probs
# [1] 0.1666667 0.1666667 0.1666667 0.2000000 0.2000000 0.0500000 0.0500000
sampled_rows <- sample(1:NROW(data), size = 5, prob = row_probs)
data[sampled_rows, ]
# group var1 var2 var3
# 2 1 ab aba abb
# 5 2 bb bba bbb
# 4 2 ba baa bab
# 1 1 aa aaa aab
# 6 3 ca caa cab
答案 1 :(得分:1)
考虑使用sample_n
中的dplyr
。
library(dplyr)
group<-c(1,1,1,2,2,3,3)
var1<-c('aa','ab','ac','ba','bb','ca','ce')
var2<-c('aaa','aba','aca','baa','bba','caa','cba')
var3<-c('aab','abb','acb','bab','bbb','cab','ceb')
data<-data.frame(group,var1,var2,var3)
sample_n(data, size = 5, weight = group)
# group var1 var2 var3
#7 3 ce cba ceb
#2 1 ab aba abb
#4 2 ba baa bab
#6 3 ca caa cab
#3 1 ac aca acb