【发布时间】:2020-10-26 09:11:21
【问题描述】:
我有一个关于 R 的数据框,其中包含多年来许多团体的支出。它基本上看起来像这样(灰色列):
我想根据上一年和下一年的支出添加各年的支出平均值,如黄色列所示。
我已尝试使用此代码:
expenditures %>%
group_by(id) %>%
mutate(
avg_exp = ifelse(year != 2011 && year != 2008,
mean(c(
Spending[Year %in% (Year-1)],
Spending[Year %in% (Year+1)])),
NA)) %>%
View()
但是,我保留了各种奇怪的数字。首先,ifelse 只应用 else 条件,即使 Year 列设置为整数。其次,即使我设置在 else 条件下也计算平均值,所有行(每组中)都填充了相同的数字,我不知道它来自哪里(它接近一般平均值组但不相同)。
有什么简单的方法可以做到这一点吗? 谢谢
【问题讨论】:
-
我认为您需要
lag并将&&更改为& -
哦,没错,切换到
&解决了 ifelse 问题,但它仍然用相同的神秘数字填充所有正确的行 -
另一种选择是将其视为线性过滤问题 - 例如
as.vector(stats::filter(c(80,87,90,95), c(0.5,0,0.5)))。这里有更复杂的应用程序 - stackoverflow.com/questions/18436574/…