我有2个具有相同数据结构的不同数据帧
我想从两个df收集样本,并制作1个指定大小的样本数据帧。我想保持样本数据集平衡。 例如,如果我从df1采样,从纽约州获得50磅,那么我要从df2随机获得50个。
这是示例dput()链接https://drive.google.com/open?id=1cMeKvUfjDp6HBidue3ET8QWqsC6d6oyt
我已经提供了从df中提取样本并对其进行混洗但无法合并第2部分的功能
sample12<- function(df1,df2,size) {
a<-df1[sample(nrow(df1),size/2,replace = T),]
b<-df2[sample(nrow(df2),size/2,replace = T),]
s1<-bind_rows(a,b)
s2<-s1[sample(1:nrow(s1)),]
assign('s1',s2,.GlobalEnv)
}
答案 0 :(得分:0)
这是如何按国家分层。
首先,计算状态频率。然后,以频率作为概率权重使用sample()。
sample12<- function(df1,df2,size) {
a.freqs <- summary(factor(df1$sitecode))
b.freqs <- summary(factor(df2$sitecode))
a<-df1[sample(nrow(df1),size/2,replace = T, prob=a.freqs),]
b<-df2[sample(nrow(df2),size/2,replace = T, prob=b.freqs),]
s1 <- rbind(a, b)
return(s1[ sample(size), ])
}
注释。
assign
,例如:ever。返回值。答案 1 :(得分:0)
这是经过反复试验的我的版本。此方法称为分层随机抽样
以指定大小从两个数据帧(df1和df2)中抽取50%作为样本
sample12<- function(df1,df2,size,variable) {
cat(
paste(
"please enter variable in '' ", " Enter the final size of sample " ,' ', sep = '\n \n'
)
)
if(!require(splitstackshape)){
install.packages("splitstackshape")
library(splitstackshape)
}
if(!require(dplyr)){
install.packages("dplyr")
library(dplyr)
}
a<-df1[sample(nrow(df1),size/2,replace = T),]
freq<-summary(factor(a[,variable]))
print(freq)
b<-data.frame(stratified(df2,group = variable,size = freq))
s1<-bind_rows(a,b)
s2<-s1[sample(1:nrow(s1)),]
print(summary(factor(s2[,variable])))
assign('s1',s2,.GlobalEnv)
}