r - rowsum 基于 r 中的分组或条件
问题描述
我有 50 多个专栏,并查看了各种解决方案,包括这个.
但是,这并不能真正回答我的问题。我有列名,例如:
total_2012Q1, total_2012Q2, total_2012Q3, total_2012Q4
,..., up tototal_2014Q4
和其他字符变量。我想按年份添加行,所以最后,我会有三年的列:total_2012, total_2013, total_2014
.
我不想rowsumsample[,2:5]
并选择类似 ... 有没有一种方法可以在不手动查看列号的情况下对它们求和?此外,split.default是一个选项,但如果还有字符变量,你如何只处理你想要总结的 int 变量?
简单的可重现示例(前):
id total_2012Q1 total_2012Q2 total_2013Q1 total_2013Q2 char1 char2
1 1231 5455 1534 2436 N Y
2 3948 1239 223 994 Y N
可重现的示例(帖子):
id total_2012 total_2013 char1 char2
1 6686 3970 N Y
2 5187 1217 Y N
感谢您的任何建议。
解决方案
你可以使用split.default
,即
sapply(split.default(df, sub('^.*_([0-9]+)Q[0-9]', '\\1', names(df))), rowSums)
# 2012 2013
#[1,] 3 23
#[2,] 7 37
#[3,] 9 49
数据:
dput(df)
structure(list(total_2012Q1 = c(1, 2, 3), total_2012Q2 = c(2,
5, 6), total_2013Q1 = c(12, 15, 16), total_2013Q2 = c(11, 22,
33)), class = "data.frame", row.names = c(NA, -3L))