【发布时间】:2018-10-29 14:00:02
【问题描述】:
我有一个 df(部分列在下面)。
account company sum
1 202003 B01 40.50
2 208001 B01 -71596.73
3 280250 B01 -6652.70
4 200001 B13 44362.77
5 202001 B13 13874.25
6 204001 B13 5744.20
7 204102 B13 295.00
8 285091 B13 317145.15
9 286101 B13 11471.13
10 298001 B13 396096.50
我正在尝试根据以下条件将 df1$sum 列中的数字添加到新数据框中:
对于每个公司(B01 和 B13),我需要为 df1$accounts 中以 ^20 开头的所有帐户聚合列 df1$sum,并将其命名为 df2$Expenses1(因此在此示例中为 202003 和208001 代表公司 B01)。
另外,我需要汇总所有以 ^28 和 ^29 开头的帐户,并将其命名为 df2$Expenses2(因此对于公司 B01,它只会是帐户 280250,对于公司 B13,它将是285091、286101 和298001 的帐户总和。
最终,新的数据框df2 应该如下所示:
Company Expenses1 Expenses2
B01 -71,556.23 -6,652.7
B13 64,276.22 724,712.78
非常感谢您对此的帮助!
【问题讨论】:
-
你试过什么?我们有一个很好的R-FAQ on "How to sum by group?"。对您来说唯一的区别是您需要先取一个子集 - 以“20”开头的帐号子集,然后按组求和;子集以“28”或“29”开头的帐号,然后按组求和。
-
如果您在“以 X 开头的帐号”部分需要帮助,我建议您使用
substr函数提取前两位数字并对其进行测试。您还可以使用带有grepl的正则表达式模式,例如"^2[89]" -
aggregate(sum ~ company + grepl("^20", account), data=df1, FUN=sum)