使用starts_with()将NA替换为0

时间:2017-06-23 20:54:58

标签: r na tidyverse

我正在尝试替换tibble中特定列列的NA值。列都以相同的前缀开头,所以我想知道是否有一种简洁的方法可以使用starts_with()包中允许我这样做的dplyr函数。

我在SO上看到了其他几个问题,但是它们都需要使用特定的列名或位置。我真的很想懒,不想定义所有列,只是前缀。

我已尝试replace_na()包中的tidyr功能无效。我知道我的代码对于作业是错误的,但我的词汇量不够大,无法知道在哪里看。

Reprex:

library(tidyverse)

tbl1 <- tibble(
 id = c(1, 2, 3),
 num_a = c(1, NA, 4),
 num_b = c(NA, 99, 100),
 col_c = c("d", "e", NA)
)

replace_na(tbl1, list(starts_with("num_") = 0)))

1 个答案:

答案 0 :(得分:6)

如何将mutate_atif_else(或case_when)一起使用?如果要将感兴趣的列中的所有NA替换为0,则此方法有效。

mutate_at(tbl1, vars( starts_with("num_") ), 
          funs( if_else( is.na(.), 0, .) ) )

# A tibble: 3 x 4
     id num_a num_b col_c
  <dbl> <dbl> <dbl> <chr>
1     1     1     0     d
2     2     0    99     e
3     3     4   100  <NA>

请注意starts_with和其他选择助手返回一个整数向量,给出匹配变量的位置。在外面的情况下尝试使用它时,我总是要记住这一点我通常使用它们..