【发布时间】:2020-11-03 14:48:08
【问题描述】:
假设您有一个如下形式的长 data.frame:
ID Group Year Field VALUE
1 1 2016 AA 10
2 1 2016 AA 16
1 1 2016 TOTAL 100
2 1 2016 TOTAL 120
etc..
并且您希望使用Field == TOTAL 作为 >2013 年的权重,为每个 group_by(Group, Year, Field) 创建一个 weighted.mean(Value,??) 的分组输出。
到目前为止,我正在使用 dplyr:
dat %>%
filter(Year>2013) %>%
group_by(Group, Year, Field) %>%
summarize(m = weighted.mean(VALUE,VALUE[Field == 'TOTAL'])) %>%
ungroup()
现在的问题(据我了解)是,使用 group_by 之后我无法定义“字段”值,因为我告诉它查看“字段 == AA”组。
将数据从长转换为宽不是解决方案,因为我有超过 1000 个不同的字段值,这些值可能会随着时间的推移而增加,并且此代码将在某个时候每天运行。
【问题讨论】:
-
为什么不用
VALUE的值在Field == TOTAL处添加另一行?然后在您对weighted.mean()的调用中引用此内容。 -
好主意。您将如何在所有“字段”值中复制该值,以确保它们在每个“年”中正确复制?
-
我现在正在研究这种方法。作为替代方案,是否可以使用
VALUE的最大值而不是Field == TOTAL的位置?假设总值将始终是每个年份和字段中最大的VALUE。 -
不幸的是,它出现在财务报告中。因此,要达到变量 TOTAL 减法会发生 - 所以我不能 100% 认为 TOTAL 是最大值。