R数据框中的条件填充值

时间:2018-06-07 11:36:27

标签: r tidyverse

让我们说a有一个简单的数据框

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

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

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

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

2 个答案:

答案 0 :(得分: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

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

答案 1 :(得分:2)

使用fill tidyr的{​​{1}}的另一个选项,它是tidyverse的一部分。

library(tidyverse)

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

dat2 <- dat %>%
  mutate(val2 = val) %>%
  fill(val2) %>%
  mutate(val = ifelse(val2 == 0, val2, val)) %>%
  select(-val2)
dat2
#   val
# 1   0
# 2   0
# 3   0
# 4   2
# 5  NA
# 6  NA