我有以下数据帧
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不是问题,但在计算除数时应该包括那个月。谢谢。
发布于 2021-07-22 01:37:30
我认为您可以使用以下解决方案。您只需要保持月份(列)的顺序不变,这样我们就可以使用y
值作为它们的时间跨度:
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
发布于 2021-07-22 02:45:29
你可以使用coalesce:
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
https://stackoverflow.com/questions/68473891
复制相似问题