R

时间:2017-07-17 17:50:11

标签: r

我有多个具有相同结构的文件。我想计算每个文件的每个第一个元素的总和。 这是一个文件的头部:

> head(NodesA1to10)
  NodeAMean NodeBMean NodeCMean NodeBMeanclo NodeCMeanclo NodeAMeanclo NodeBMeanin NodeCMeanin
1       0.6       0.5       0.1   0.06978355   0.08988359   0.06957624   0.3890288   0.2389382
2       0.6       1.1       0.4   0.04403793   0.04955660   0.04052408   0.4039787   0.2533702
3       0.5       1.6       0.4   0.03244537   0.03386485   0.02925561   0.4301655   0.2714006
4       0.6       2.7       1.3   0.02629242   0.02545891   0.02101667   0.4710782   0.2987464
5       1.0       2.9       1.4   0.02194354   0.02050273   0.01643439   0.5221127   0.3531018
6       1.8       5.1       2.0   0.01895985   0.01674231   0.01369418   0.5651066   0.3922610
  NodeAMeanin NodeBMeanout NodeCMeanout NodeAMeanout
1   0.3550979    0.3236412    0.3807460    0.2786777
2   0.6173852    0.4587713    0.4784292    0.4671891
3   0.7020968    0.5933347    0.5594147    0.5536033
4   0.7686962    0.7336590    0.6230537    0.5872133
5   0.8024617    0.8738159    0.7147912    0.6457293
6   0.8289504    1.0158102    0.7665834    0.7186818

我总共有10个格式相同的文件。我想计算总和如下:

N<-10
    B1_1 <-sum(NodesA1to10$NodeBMean[1],NodesA11to20$NodeBMean[1],NodesA21to30$NodeBMean[1],NodesA31to40$NodeBMean[1],
               NodesA41to50$NodeBMean[1],NodesA61to70$NodeBMean[1],NodesA71to80$NodeBMean[1],NodesA81to90$NodeBMean[1],
               NodesA91to100$NodeBMean[1])/N

    B1_2 <-sum(NodesA1to10$NodeBMean[2],NodesA11to20$NodeBMean[2],NodesA21to30$NodeBMean[2],NodesA31to40$NodeBMean[2],
               NodesA41to50$NodeBMean[2],NodesA61to70$NodeBMean[2],NodesA71to80$NodeBMean[2],NodesA81to90$NodeBMean[2],
               NodesA91to100$NodeBMean[2])/N

此代码适用于我,但我必须重复10次,并针对不同的条件进一步做,因此我真的想以更快的方式做到这一点。我试着使用list:

allNodesA <- list(NodesA1to10,NodesA11to20,NodesA21to30,
                  NodesA31to40,NodesA41to50,NodesA51to60,NodesA61to70,
                  NodesA71to80,NodesA81to90,NodesA91to100)
B1<-lapply(allNodesA, function(z) { z$NodeBMean <- sum(z$NodeBMean[[1]]);z})
NodesBb<-do.call(rbind.data.frame, B1)
B1<-list()
for (j in 1:10)
{
  B1[[j]]<-lapply(allNodesA, function(z) { sum(z[[j]]$NodeBMean[j])})
}

但是这个解决方案给了我一个错误:

 Error in z[[j]]$NodeBMean : $ operator is invalid for atomic vectors

有人可以帮助我如何找到更多最佳方法来获得许多文件中每个第1,第2 ......第10个元素的总和?

1 个答案:

答案 0 :(得分:1)

这样的事可能适合你。

N <-10

allNodesA <- list(NodesA1to10,NodesA11to20,NodesA21to30,
                  NodesA31to40,NodesA41to50,NodesA51to60,NodesA61to70,
                  NodesA71to80,NodesA81to90,NodesA91to100)

vals <- numeric()

for(i in 1:nrow(NodesA1to10)){
  vals <- append(vals, sum(sapply(allNodesA, function(x) x[i,"NodeBMean"])) / N)
}

vals