计算数据框行数的更好方法

时间:2016-01-26 06:14:05

标签: r

我正在尝试计算数据框中行的值。 基本上我有一个数据框,其中包含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

1 个答案:

答案 0 :(得分:1)

使用apply

df$tot <- apply(df, 1, function(x) {
  sum(
    rowMeans(
       replicate(
         1000, sample(x, 5, replace=F)*5:1
       )
    )
 )
})