【发布时间】:2018-11-30 16:11:48
【问题描述】:
如何将所有 0 替换为 R 中每个 ID 的最后一个非零值?
例子:
输入:
df <- data.frame(ID = c(1,1,1,1,1,1,1,2,2,2,2),
Var1 = c(0,10, 30, 0, 0,50,80,0, 0, 57, 0))
输出:
df <- data.frame(ID = c(1,1,1,1,1,1,1,2,2,2,2),
Var1 = c(0,10, 30, 0, 0,50,80,0, 0, 57, 0),
res = c(0,10,30,30,30,50,80,0,0,57,57))
有没有简单的滞后功能方法?
【问题讨论】:
-
library(zoo); na.locf(replace(df$Var1, df$Var1 == 0, NA)) -
@RonakShah 当第一个值为 0 时,我得到了一个短向量:10 30 30 30 50 80 80 80 57 57 我怎样才能省略这个,并保持每个 id 的第一个 0
-
@RonakShah 您是否删除了您的答案: library(zoo) df$res
-
是的,我这样做是因为我没有考虑到每个
ID的事情。您可以通过@docendo discimusdf %>% group_by(ID) %>% mutate(x = na.locf(replace(Var1, cumsum(Var1 !=0) > 0 & Var1 == 0, NA)))修改答案,这应该会给您预期的输出。 -
你从哪里得到这些有趣的问题?