我想使用其他列中的值替换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有办法吗?
谢谢。
答案 0 :(得分:0)
你快到了
df <- df %>% mutate(a= ifelse(is.na(count), value, count))
答案 1 :(得分:0)
library(dplyr)
df <- df %>%
dplyr::mutate(a = ifelse(is.na(count), value,
ifelse(count >= 0, count, "error")))
答案 2 :(得分:0)
正如在评论之一中已经说过的那样,在这种情况下,由于 NAs,coalesce 是最佳解决方案:
df %>%
dplyr::mutate(a = coalesce(count, value))
但是在 dplyr 中使用 case_when() 的解决方案也很有用:
df %>%
dplyr::mutate(a = case_when(!is.na(count) ~ count,
TRUE ~ value))