首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >计算NA存在且不同周期可用时的增长

计算NA存在且不同周期可用时的增长
EN

Stack Overflow用户
提问于 2021-07-22 01:15:34
回答 2查看 28关注 0票数 1

我有以下数据帧

代码语言:javascript
运行
复制
june<- c(5,6,7)
may<- c(1,NA,1)
april<- c(2,2,2)
march<- c(3,3,NA)
feb<- c(4,NA,NA)
dt<-data.frame(june,may,april,march,feb)

每一行包含自上个月以来的累计增长单位。我需要使用以下公式计算增长率:6月值减去最早可用值,所有除以两个值的总周期数减1。也就是说,对于第一行,它是(5-4)/4,因为5和4值跨越5个月的周期,减去1是4;对于第二行,它是(6-3)/3;对于第三行,它是(7-2)/2。如果feb的所有值都存在,那么这样做不是问题。但是我不知道怎么做,当有NA存在于feb等情况下?数列中间的NA不是问题,但在计算除数时应该包括那个月。谢谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-07-22 01:37:30

我认为您可以使用以下解决方案。您只需要保持月份(列)的顺序不变,这样我们就可以使用y值作为它们的时间跨度:

代码语言:javascript
运行
复制
library(dplyr)
library(purrr)

dt %>%
  mutate(res = pmap(dt, ~ {x <- c(...)[-1]
  y <- c(...)[-1][which.min(abs(..1 - c(...)[-1]))]
  (..1 - y) / y}))

  june may april march feb  res
1    5   1     2     3   4 0.25
2    6  NA     2     3  NA    1
3    7   1     2    NA  NA  2.5
票数 1
EN

Stack Overflow用户

发布于 2021-07-22 02:45:29

你可以使用coalesce:

代码语言:javascript
运行
复制
dt %>%
   mutate(res = invoke(coalesce, rev(cur_data())),
          res = (june - res)/res)

  june may april march feb  res
1    5   1     2     3   4 0.25
2    6  NA     2     3  NA 1.00
3    7   1     2    NA  NA 2.50
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68473891

复制
相关文章

相似问题

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