gpt4 book ai didi

使用starts_with() 将 NA 替换为 0

转载 作者:行者123 更新时间:2023-12-02 20:45:45 24 4
gpt4 key购买 nike

我正在尝试替换 tibble 中一组特定列的 NA 值。这些列都以相同的前缀开头,所以我想知道是否有一种简洁的方法来使用 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)一起使用怎么样?如果您想将感兴趣的列中的所有 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 和其他选择帮助程序返回给出匹配变量位置的整数向量。在尝试使用它们时,我始终必须牢记这一点我通常使用它们的方式之外的情况..

在较新版本的 dplyr 中,使用带有波形符的 list() 而不是 funs():

list( ~if_else( is.na(.), 0, .) )

关于使用starts_with() 将 NA 替换为 0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44729796/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com