【发布时间】:2016-08-06 01:08:56
【问题描述】:
我试图弄清楚如何创建具有最小样本量的箱,该箱还考虑了特定列中的值。
因此,在下面的虚拟数据中,我想创建其中至少包含 6 个样本的 bin,但是如果 bin 包含具有 a 列中特定值的行,我希望该 bin 也包含所有具有相同值的其他行。我也不希望任何 bin 仅包含 a 行中的 1 个唯一值。然后,我希望输出有一行,其中包含 a 列中唯一值的平均值、b 列中所有值的平均值以及具有样本大小的列。
df<-data.frame(a=c(1,1,2,2,2,3,3,3,3,4,4,5,6,6,6,7,7,7,7,7,7,8,8,8,9,9,9,9,10,10,10),
b=c(12,13,11,12,12,11,15,13,12,11,14,15,11,14,12,11,14,12,13,15,11,11,12,13,14,16,14,13,15,13,15))
我希望输出看起来像这样:
mean.a mean.b n
1 2.0 12.33333 9
2 5.0 12.83333 6
3 7.0 12.66667 6
4 8.5 13.28571 7
这是我目前所拥有的:
x<-df
final<-NULL
for(i in 1:16){
x1<-x[1:6,]
x2<-x[-c(1:6),]
x3<-rbind(x1, x2[x2$a==x1$a[6],])
n<-nrow(x3)
y<-mean(x3$b)
z<-mean(unique(x3$a))
f<-data.frame(mean.a=z, mean.b=y, n=n)
final<-rbind(final,f)
x<-x[-c(1:n),]
}
final<-final[complete.cases(final),]
我遇到的问题是我无法弄清楚如何在 a 列中没有一个具有唯一值的 bin。例如,在第三个 bin 中,所有 6 行的 mean.a$a=7,但我想将下一个连续行以及 a 列中具有该行值的所有行添加到该 bin(这将是所有行在这种情况下有 mean.a$a=8)。
另外,我不知道如何让循环继续循环,而顶部没有 1:number,然后只删除带有 NA 的行,这不是什么大不了的事,但这就是因为它有点乱。
我无论如何都不会加入这个循环,如果有更简单的方法来回答这个问题,我完全赞成!
【问题讨论】: