繁体   English   中英

使用 starts_with() 将 NA 替换为 0

[英]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_atif_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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM