R 规范的 dplyr 替换方式

标签 r dplyr

<分区>

假设你有:

df = data.frame(a = c(1,2,NA),b = c(NA, 1,2))
> df
   a  b
1  1 NA
2  2  1
3 NA  2

并希望基于 a 创建一个新列 c。如果缺少 a,则使用 b。这有效:

df %>% mutate(c= a,
              c = replace(c, is.na(a), b[is.na(a)]))

但是(对我来说,只有我?)看起来很笨拙(从某种意义上说,我必须拼出 is.na(a) 两次)。这更容易:

df %>%
   rowwise() %>% 
   mutate(c = a,
          c = replace(c, is.na(a), b]))

但它需要额外的 rowwise() 命令,我可以想象我的 mutate 语句的总和将无法按行工作的情况。

我是否遗漏了一些 dplyr 功能来简化此(非常常见的任务?)?

最佳答案

为此,您可以使用 dplyr 中的 coalesce():

df %>%
 mutate(c = coalesce(a, b))

   a  b c
1  1 NA 1
2  2  1 2
3 NA  2 2

来自文档:

Given a set of vectors, coalesce() finds the first non-missing value at each position.

或者如果你想在整个 df 上应用它:

df %>%
 mutate(c = coalesce(!!!.))

关于R 规范的 dplyr 替换方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57936245/

相关文章:

R:如何根据另一个变量中的值选择 dplyr::distinct() 保留哪一行?

r - 条件滚动平均值

将R中矩阵中的二维数组的行 reshape 为列

r - 了解理货(sort = TRUE)

r - 在 R 中编程二元正态 CDF

r - 如何在 R 中的 y 数据框中找到最接近 x 的值?

r - dplyr - 多个汇总函数

r - 按组查找插值,也许使用 dplyr

R. 如何使用 T 和 F 代替 TRUE 和 FALSE

r - dplyr 和带有 summarise 的聚合;一种在不同聚合级别获取平均值的简单方法