繁体   English   中英

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

[英]Merge “n” rows in a data.frame by taking the sum of each column

我在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 + 2 7 = 2 + 5 10 = 3 + 75 = 4 + 1 我不知道如何在R中做到这一点。我们可以使用rbind或一些类似的函数在一行或两行代码中实现这一点吗?

我们可以split数据框分为两组交替的行,然后使用Reduce将它们明智地添加。

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

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

也许像

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

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

这是带有基数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

我们可以使用rowsum

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM