[英]Growth rates, using the last non-NA value by groups
我有一个看起来像这样的数据框:
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差距”上的增长率。 例如:第4行的增长率应为5至7,第9行的增长率应为1至5。
谢谢!
zoo::na.locf
会将NA替换为最后一个非NA值,因此这可能对您zoo::na.locf
:
df <- df %>%
group_by(id) %>%
mutate(
valuenoNA = zoo::na.locf(value),
growth = log(valuenoNA) - as.numeric(lag(valuenoNA)))
1 2 A NA 2
2 5 A -0.3905621 5
3 NA A -3.3905621 5
4 7 A -3.0540899 7
5 9 A -4.8027754 9
6 1 B NA 1
7 NA B -1.0000000 1
8 NA B -1.0000000 1
9 5 B 0.6094379 5
10 6 B -3.2082405 6
我们可以使用tidyverse
fill
library(tidyverse)
df %>%
group_by(id) %>%
fill(value) %>%
mutate(growth = log(value) - lag(value))
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.