首页 > 解决方案 > rowsum 基于 r 中的分组或条件

问题描述

我想根据列名r

我有 50 多个专栏,并查看了各种解决方案,包括这个.

但是,这并不能真正回答我的问题。我有列名,例如: total_2012Q1, total_2012Q2, total_2012Q3, total_2012Q4,..., up tototal_2014Q4和其他字符变量。我想按年份添加行,所以最后,我会有三年的列:total_2012, total_2013, total_2014.

我不想sample[,2:5]并选择类似 ... 有没有一种方法可以在不手动查看列号的情况下对它们求和?此外,是一个选项,但如果还有字符变量,你如何只处理你想要总结的 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

感谢您的任何建议。

标签: rgroupingconditional-statementsrowsum

解决方案


你可以使用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))

推荐阅读