【发布时间】:2023-01-27 18:45:53
【问题描述】:
我有一个时间序列数据集,我想在其中引用前一年的值(如果存在)。因此,我创建了一个包含我所指日期的辅助列,并期望代码从该确切年份检索值。然而,这并没有发生,而是它在所有行中检索相同的值,对应于第一个可能的年份。
我使用以下代码
library(dplyr)
library(lubridate)
dataset <- data.frame(names=c("a","a","a","a","a","a"),
values=c(2,3,4,5,6,7),
dates=dmy(c("01/01/2010","01/01/2011","01/01/2012","01/01/2013","01/01/2014","01/01/2015")))
dataset_calc <- dataset %>%
group_by(names) %>%
mutate(yoy=case_when(dates>=dmy("01/01/2011") ~ dates-years(1),
TRUE ~ dmy("01/01/2010"))) %>%
ungroup()
final <- dataset_calc %>%
mutate(yoyval= values[dates==yoy])
但是得到这个结果:
names values dates yoy yoyval
<chr> <dbl> <date> <date> <dbl>
1 a 2 2010-01-01 2010-01-01 2
2 a 3 2011-01-01 2010-01-01 2
3 a 4 2012-01-01 2011-01-01 2
4 a 5 2013-01-01 2012-01-01 2
5 a 6 2014-01-01 2013-01-01 2
6 a 7 2015-01-01 2014-01-01 2
我期望获得以下信息的地方:
names values dates yoy yoyval
<chr> <dbl> <date> <date> <dbl>
1 a 2 2010-01-01 2010-01-01 2
2 a 3 2011-01-01 2010-01-01 2
3 a 4 2012-01-01 2011-01-01 3
4 a 5 2013-01-01 2012-01-01 4
5 a 6 2014-01-01 2013-01-01 5
6 a 7 2015-01-01 2014-01-01 6
我没有正确使用方括号中的条件,还是我误解了 mutate 如何使用条件?
【问题讨论】:
-
您没有正确使用方括号中的条件。你能描述一下你想让最后的
mutate()做什么吗? -
首先,您的代码中根本不需要
group_by()。其次,问题不在于mutate,只是矢量化子集没有做你想做的事。相反,您需要match。