我正在尝试计算数据框中行的值。 基本上我有一个数据框,其中包含5列,0或1(存在/不存在)。我想在这5列上随机化这些值的顺序,对这些列应用计算,复制1000次,然后计算每列不同计算的平均值,然后将这些值加到每行一个值中。
我尝试用lapply做这个并且申请但是无处不在。我设法用for循环来做,但我想知道是否有更短/更好的方法。
这就是我最终的结果,并根据需要运作:
> df <- data.frame(t(replicate(10,sample(c(0,1),5,replace=TRUE))))
> df
X1 X2 X3 X4 X5
1 1 1 0 1 1
2 1 1 1 0 0
3 0 0 0 1 0
4 0 1 1 1 0
5 0 0 1 0 1
6 0 1 1 1 0
7 0 0 1 0 1
8 0 0 0 0 1
9 1 0 0 1 0
10 0 1 0 1 1
> for (i in 1:nrow(df)){
+ v<-sum(
+ rowMeans(
+ replicate(1000,{
+ sample(as.numeric(df[i,c("X1","X2","X3","X4","X5")]),5, replace=FALSE)*c(5,4,3,2,1)
+ }
+ )
+ )
+ )
+ df[i,c("tot")]<-v
+ }
> df
X1 X2 X3 X4 X5 tot
1 1 1 0 1 1 12.0184
2 1 1 1 0 0 8.9786
3 0 0 0 1 0 3.0138
4 0 1 1 1 0 9.0013
5 0 0 1 0 1 6.0196
6 0 1 1 1 0 9.0227
7 0 0 1 0 1 5.9837
8 0 0 0 0 1 3.0063
9 1 0 0 1 0 6.0069
10 0 1 0 1 1 9.0032
答案 0 :(得分:1)
使用apply
:
df$tot <- apply(df, 1, function(x) {
sum(
rowMeans(
replicate(
1000, sample(x, 5, replace=F)*5:1
)
)
)
})