数据帧R中每n列的Sum列

时间:2016-01-29 11:16:43

标签: r for-loop dataframe sum

我有一个df(A),其中包含10列和300行。我需要以这种方式对它们之间的每两列进行求和:

A[,1]+A[,2] = # first result
A[,3]+A[,4] = # second result
A[,5]+A[,6]= # third result
....
A[,9]+A[,10] # last result

预期的最终结果是一个包含5列和300行的新数据帧。 有什么办法吗?使用tapply或循环for? 我知道我可以试试这个例子,但我正在寻找一种快速的方法 谢谢

3 个答案:

答案 0 :(得分:4)

我们可以使用sapply

df <- data.frame(replicate(expr=rnorm(100),n = 10))
sapply(seq(1,9,by=2),function(i) rowSums(df[,i:(i+1)]))

答案 1 :(得分:4)

你可以在没有* apply循环的情况下完成。

示例数据:

df <- head(iris[-5])
df
#  Sepal.Length Sepal.Width Petal.Length Petal.Width
#1          5.1         3.5          1.4         0.2
#2          4.9         3.0          1.4         0.2
#3          4.7         3.2          1.3         0.2
#4          4.6         3.1          1.5         0.2
#5          5.0         3.6          1.4         0.2
#6          5.4         3.9          1.7         0.4

现在您可以使用逻辑的向量回收:

df[c(TRUE,FALSE)] + df[c(FALSE,TRUE)]
#  Sepal.Length Petal.Length
#1          8.6          1.6
#2          7.9          1.6
#3          7.9          1.5
#4          7.7          1.7
#5          8.6          1.6
#6          9.3          2.1

答案 2 :(得分:1)

这有点神秘,但我应该很快。我们将每列添加到相邻列。然后使用c(T,F)删除不必要的结果,这些结果通过奇数列进行循环:

(A[1:(ncol(A)-1)] + A[2:ncol(A)])[c(T,F)]