【发布时间】:2019-10-20 08:38:49
【问题描述】:
我想使用不同列中的值来替换 NA 值。在此示例中,我的 df 中的最后四个值在“计数”列中有 NA - 我希望将 NA 替换为“值”列中的值。
这是一个虚拟数据集
df <- structure(list(First = structure(c(17995, 17997, 17929, 17919,
17808, 18031, NA, NA, NA, NA), class = "Date"), Last =
structure(c(17999,
17998, 17929, 17919, 17809, 18031, 17965, 17965, 17965, 17965
), class = "Date"), days = c(5, 2, 1, 1, 2, 1, NA, NA, NA, NA
), variable = structure(c(4L, 4L, 4L, 4L, 4L, 4L, 4L, 1L, 2L,
3L), .Label = c("0-12", "0-25", "0-50", "0-100"), class = "factor"),
value = c(1, 0, 1, 1, 1, 1, 1, 0, 1, 1), count = c(5, 0,
1, 1, 2, 1, NA, NA, NA, NA)), class = "data.frame", row.names = c(NA,
-10L))
关于如何解决它的一些想法....但由于我的编码技能不佳,这不起作用:
df <- df %>%
mutate(a = if_else(count == NA, value, if_else(count >=0, count, a)))
或者也许有 case_when 的方法?
谢谢。
【问题讨论】:
-
如果你想测试一个元素是否是
NA,你需要is.na而不是... == NA。试试df %>% mutate(a = replace(count, is.na(count), value[is.na(count)])) -
这就是
coalesce的用途。mutate(a = coalesce(count, value)).
标签: r if-statement dplyr case-when