[英]replace NA with 0 using starts_with()
我试图取代NA值在我的一组特定的列tibble
。 这些列都以相同的前缀开头,所以我想知道是否有一种简洁的方法可以使用dplyr
包中的starts_with()
函数来允许我这样做。
我在 SO 上看到了其他几个问题,但是它们都需要使用特定的列名称或位置。 我真的很懒惰,不想定义所有列,只是前缀。
我已经尝试了tidyr
包中的replace_na()
函数无济于事。 我知道我的代码对于作业来说是错误的,但我的词汇量不够大,不知道去哪里找。
代表:
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)))
如何将mutate_at
与if_else
(或case_when
)一起使用? 如果您想用 0 替换感兴趣列中的所有NA
,这将起作用。
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
和其他选择助手返回一个整数向量,给出匹配变量的位置。 在我通常使用它们的情况之外尝试使用它们时,我总是必须牢记这一点。
在较新版本的dplyr 中,使用带有波浪号的list()
而不是funs()
:
list( ~if_else( is.na(.), 0, .) )
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.