首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >按组使用最后一个非NA值的增长率。

按组使用最后一个非NA值的增长率。
EN

Stack Overflow用户
提问于 2017-03-04 16:31:51
回答 2查看 213关注 0票数 1

我有一个像这样的数据文件:

代码语言:javascript
复制
   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变量来计算这个值的增长率。通常,我会这样做:

代码语言:javascript
复制
df <- df %>% group_by(id) %>% mutate(growth = log(value) - as.numeric(lag(value)))

为了获得这个数据:

代码语言:javascript
复制
   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。

谢谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-03-04 18:02:09

zoo::na.locf将用最后一个非NA值替换NAs,因此这可能适用于您:

代码语言:javascript
复制
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
票数 2
EN

Stack Overflow用户

发布于 2017-03-04 18:16:03

我们可以使用来自filltidyverse

代码语言:javascript
复制
library(tidyverse)
df %>%
    group_by(id) %>%
    fill(value) %>%
    mutate(growth = log(value) - lag(value))
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42598389

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档