我有一个像这样的数据文件:
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。
谢谢!
发布于 2017-03-04 18:02:09
zoo::na.locf将用最后一个非NA值替换NAs,因此这可能适用于您:
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发布于 2017-03-04 18:16:03
我们可以使用来自fill的tidyverse
library(tidyverse)
df %>%
group_by(id) %>%
fill(value) %>%
mutate(growth = log(value) - lag(value))https://stackoverflow.com/questions/42598389
复制相似问题