我正在尝试替换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)))
答案 0 :(得分:6)
如何将mutate_at
与if_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
和其他选择助手返回一个整数向量,给出匹配变量的位置。在外面的情况下尝试使用它时,我总是要记住这一点我通常使用它们..