通过获取每列的总和来合并data.frame中的“n”行

时间:2017-03-15 08:11:31

标签: r dataframe statistics

我在R中有一个看起来像

的data.frame
X1 X2 X3 X4
11  2  3  4
2   5  7  1
12  4  7  6
3   2  9  6

我希望通过在每列中取其值的总和,将每组两行合并为一。

X1  X2  X3  X4
13  7   10  5
15  6   16  12 

此处13 = 11 + 27 = 2 + 510 = 3 + 75 = 4 + 1。我不知道如何在R中执行此操作。我们可以使用rbind或类似函数在一行或两行代码中实现此目的吗?

4 个答案:

答案 0 :(得分:2)

我们可以split将数据帧分成两组备用行,然后使用Reduce以元素方式添加它们。

Reduce("+", split(df, c(TRUE, FALSE)))

#  X1 X2 X3 X4
#2 13  7 10  5
#4 15  6 16 12

答案 1 :(得分:1)

可能像

df <- data.frame(a=1:10, b=10:19)

df[seq(1,nrow(df),2),] + df[seq(2,nrow(df),2),]

答案 2 :(得分:1)

以下是基础R的解决方案,它使用回收规则并使用逻辑向量进行索引:

as.matrix(x)[c(TRUE, FALSE),] + as.matrix(x)[c(FALSE, TRUE),]

测试代码:

x <- read.table(head=TRUE, text=
"X1 X2 X3 X4
11  2  3  4
2   5  7  1
12  4  7  6
3   2  9  6")
as.matrix(x)[c(TRUE, FALSE),] + as.matrix(x)[c(FALSE, TRUE),]
#     X1 X2 X3 X4
#[1,] 13  7 10  5
#[2,] 15  6 16 12

答案 3 :(得分:1)

我们可以使用rowsum

rowsum(df1, gl(nrow(df1), 2, nrow(df1)))
#  X1 X2 X3 X4
#1 13  7 10  5
#2 15  6 16 12