繁体   English   中英

增长率,按组使用最近的非NA值

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM