我有一个df,其中有不同年份的id和一个变量CI,它是一个id-年份特定的指标,范围在0和1之间。
以下是我的数据的示例:
df <- data.frame(
id = rep(c("002", "004"), each = 6),
years = rep(c(1920, 1921, 1922, 1923, 1924, 1925), times = 2),
CI = c(0.3023104860, 0.3184651329, 0.3173958777, 0.2833701369, 0.2858395440, 0.2436667622,
0.5499678083, 0.5746689830, 0.5820752615, 0.5941080701, 0.6281830146, 0.6198584776)
)
字符串
我想计算每个id的这个指标的增长率。
它应该是相当直接的,但我不能得到正确的结果,也无法找到可能相关的职位的答案。
我尝试的代码是:
df <- df %>%
group_by(id) %>%
mutate(indicator_growth = (CI - (lag(CI)/lag(CI)))
型
问题是变量indicator_growth被添加到df中,但它只包含0个值。
附言:时间序列对于一些id有一些差距(不是所有的id都有所有年份的CI数据),但是我已经试着只对一个有所有年份数据的id进行同样的计算,我仍然只得到0。
你知道为什么会发生这种情况,以及如何获得实际的增长率吗?你是否也可以提供一个解决方案,以考虑时间序列中的差距,如果差距< 3年,我可以获得最近可用年份之间的增长率,如果差距更大,则为NA值?
先谢谢你了。
3条答案
按热度按时间daupos2t1#
根据你的解释,我认为你正在寻找
lead
而不是lag
-字符串
b1uwtaje2#
首先,你的代码是错误的。你还错过了一个关闭括号
)
,我已经纠正:字符串
您应该将代码更改为
(CI - lag(CI)) / lag(CI)
,而不是(CI - (lag(CI)/lag(CI)))
,这会计算错误的增长率。更好的用途:
型
此外,对于第二个要求,一种解决方法是使用
ifelse()
函数检查时间间隔是否小于3年,并相应地计算增长率。下面是如何:
型
看看这是否有帮助……
4ioopgfo3#
问题是
lead
和lag
在我的环境中被屏蔽了,因此不能正常工作。字符串
这个代码是正确计算的。
非常感谢大家的帮助!