我有一个如下所示的数据框:
x<-data.frame(a=6, b=5:1, c=7, d=10:6)
> x
a b c d
1 6 5 7 10
2 6 4 7 9
3 6 3 7 8
4 6 2 7 7
5 6 1 7 6
我正在尝试获取列a
&amp;列的总和b
和c
&amp; d
在另一个数据框中应该如下所示:
> new
ab cd
1 11 17
2 10 16
3 9 15
4 8 14
5 7 13
我尝试了rowSums()
函数,但它返回了每行所有列的总和,我尝试了rowSums(x[c(1,2), c(3,4)])
但没有任何效果。请帮忙!!
答案 0 :(得分:1)
您可以对列子集使用rowSums
。
作为数据框:
data.frame(ab = rowSums(x[c("a", "b")]), cd = rowSums(x[c("c", "d")]))
# ab cd
# 1 11 17
# 2 10 16
# 3 9 15
# 4 8 14
# 5 7 13
作为矩阵:
cbind(ab = rowSums(x[1:2]), cd = rowSums(x[3:4]))
对于更广泛的数据框,您还可以在列子集列表上使用sapply
。
sapply(list(1:2, 3:4), function(y) rowSums(x[y]))
对于所有成对列组合:
y <- combn(ncol(x), 2L, function(y) rowSums(x[y]))
colnames(y) <- combn(names(x), 2L, paste, collapse = "")
y
# ab ac ad bc bd cd
# [1,] 11 13 16 12 15 17
# [2,] 10 13 15 11 13 16
# [3,] 9 13 14 10 11 15
# [4,] 8 13 13 9 9 14
# [5,] 7 13 12 8 7 13
答案 1 :(得分:0)
这是另一种选择:
> sapply(split.default(x, 0:(length(x)-1) %/% 2), rowSums)
0 1
[1,] 11 17
[2,] 10 16
[3,] 9 15
[4,] 8 14
[5,] 7 13
0:(length(x)-1) %/% 2
步骤会创建一组2个可与split
一起使用的组。它还将处理奇数列(将最终列视为一组自己的列)。由于split
的默认data.frame
“方法”按行拆分,因此您需要指定split.default
将列拆分为组。