假设有一个简单的数据框
data.frame(val=c(0, NA, NA, 2, NA, NA))
如果值为0,我如何仅传播该值以获得所需的数据帧:
data.frame(val=c(0, 0, 0, 2, NA, NA))
我更喜欢与tidyverse兼容的解决方案.
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)
然后,您可以删除原始变量并创建仅包含更新值的新数据集.