【发布时间】:2017-03-04 16:31:51
【问题描述】:
我有一个如下所示的数据框:
value id
1 2 A
2 5 A
3 NA A
4 7 A
5 9 A
6 1 B
7 NA B
8 NA B
9 5 B
10 6 B
我想使用 id 变量来计算值的增长率来分组。通常,我会这样做:
df <- df %>% group_by(id) %>% mutate(growth = log(value) - as.numeric(lag(value)))
要获取此数据框:
value id growth
(dbl) (chr) (dbl)
1 2 A NA
2 5 A -0.3905621
3 NA A NA
4 7 A NA
5 9 A -4.8027754
6 1 B NA
7 NA B NA
8 NA B NA
9 5 B NA
10 6 B -3.2082405
现在我想做的是将最后一个非 NA 值也用于增长率。有点像计算“NA-gaps”的增长率。例如:第 4 行应该是从 5 到 7 的增长率,第 9 行应该是从 1 到 5 的增长率。p>
谢谢!
【问题讨论】:
-
可能会在计算增长率之前进行排序?
-
df %>% filter(!is.na(value)) %>% group_by(id) %>% mutate(growth = log(value) - as.numeric(lag(value)))? -
不幸的是,这会返回一个没有 NA 值的较小数据集,这会导致问题,因为我正在使用具有很多列的数据集来计算增长率,所以我无法过滤只有一个值。
标签: r