R数据框中的条件填充值

Kre*_*ten 1 r tidyverse

假设有一个简单的数据框

data.frame(val=c(0, NA, NA, 2, NA, NA))

如果值为0,我如何仅传播该值以获得所需的数据帧:

data.frame(val=c(0, 0, 0, 2, NA, NA))

我更喜欢与tidyverse兼容的解决方案.

Ant*_*osK 6

library(zoo)
library(dplyr)

df = data.frame(val=c(0, NA, NA, 2, NA, NA))

df %>% mutate(val2 = ifelse(is.na(val) & na.locf(val) == 0, na.locf(val), val))

#   val val2
# 1   0    0
# 2  NA    0
# 3  NA    0
# 4   2    2
# 5  NA   NA
# 6  NA   NA
Run Code Online (Sandbox Code Playgroud)

然后,您可以删除原始变量并创建仅包含更新值的新数据集.

  • 也许这个:`df%>%mutate(val2 = replace(val,na.locf(df $ val == 0),0))`? (2认同)