我有一个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
?
我知道我可以试试这个例子,但我正在寻找一种快速的方法
谢谢
答案 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)]