r - "tidyr like"从不同的列中填充 na

标签 r dplyr tidyr tidyverse

我有一个缺失值的数据框是某列(谁没有)。 例如:

df <- data.frame(x = c(2,NA,4), y = 5:7)
df
   x y
1  2 5
2 NA 6
3  4 7

我想用不同列的值替换缺失值。显然有很多方法可以做到这一点,例如:

 df %>%
   mutate(x = ifelse(is.na(x), y, x))

  x y
1 2 5
2 6 6
3 4 7

但是,我正在寻找更优雅的东西,比如

df %>% fill(x,y) 

但找不到任何东西。这样的东西存在吗?

谢谢!

最佳答案

您想更改单个列中的值,同时保持相同的行数。做到这一点的 tidyverse 方法是 dplyr::mutate,而你想要的特定操作的 tidyverse 实现是 dplyr::coalesce,正如 docendo discimus 所建议的:

df %>% mutate(x = coalesce(x, y))

如果有一个函数将这两个步骤结合起来,事情就会不那么整洁和不一致,因为它不是对整个数据框进行操作,只是对单个列进行操作。它也不太灵活,因为 coalesce 可以用于向量,无论它们是否在数据框中,这很好!


(我实际上不喜欢 tidyr::fill - 我认为它是一致的,因为它对数据框的所有列进行操作,但我更喜欢它采用单个向量并且通常在内部使用mutatemutate_all(fill) 很容易完成整个数据框。所以我最终仍然依赖 zoo::na.locf一般用途。)

关于r - "tidyr like"从不同的列中填充 na,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47200908/

相关文章:

r - 如何计算多个列表中向量的平均值?

r - 将列值与 rowSums 进行比较

r - 使用 ggplot2、aes_string 和 reorder 制作绘图函数

r - 将 ymd_hms 时间映射到 15 分钟的时间间隔

正则表达式(使用 tidyr 收集多组列)

r - 用 tidyr 收集两组列

r - 创建新变量的字符位置标识

r - 在字符串中排序名称并总结订单号

r - 使用 dplyr 过滤包含部分列字符串的行

r - 在 r : increase argument font size without arguments gone missing, 中绘制 barplot 并绘制 bar 附近的值