gpt4 book ai didi

r - 与 ifelse 和 is.na 交叉变异

转载 作者:行者123 更新时间:2023-12-05 01:32:11 25 4
gpt4 key购买 nike

我有下面列出的格式的数据,其中我需要使用的所有变量都是 NA 或变量的名称,我需要将 NA 更改为 0,并将字符串为 1。我正在尝试使用 dplyr::across()ifelse(),但返回的都是 1。我现在唯一可行的解​​决方案是单独改变每个变量。

我如何一次将多个变量中的所有 NA 更改为 0 并将所有字符串更改为 1?

library(dplyr)
color_names <- c("black", "grey", "white", "purple")

my_colors <- tribble(
~black, ~grey, ~white, ~purple,
NA, "grey", NA, "purple",
NA, NA, "white", NA,
"black",NA, NA, NA,
NA, "grey", NA, NA
)

my_colors %>%
mutate(across(all_of(color_names), ~ifelse(is.na(cur_column()), 0, 1)))
#> # A tibble: 4 x 4
#> black grey white purple
#> <dbl> <dbl> <dbl> <dbl>
#> 1 1 1 1 1
#> 2 1 1 1 1
#> 3 1 1 1 1
#> 4 1 1 1 1

reprex package 创建于 2021-01-13 (v0.3.0)

最佳答案

使用 across 你可以通过以下方式避免 ifelse:

library(dplyr)
my_colors %>% mutate(across(.fns = ~+(!is.na(.))))

但是,您也可以避免across,因为is.na 使用数据帧/小标题。

my_colors[] <- +(!is.na(my_colors))
my_colors

#A tibble: 4 x 4
# black grey white purple
# <int> <int> <int> <int>
#1 0 1 0 1
#2 0 0 1 0
#3 1 0 0 0
#4 0 1 0 0

!is.na(.) 返回一个逻辑向量TRUE/FALSE+ 用于将它们转换为 1/0

关于r - 与 ifelse 和 is.na 交叉变异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65711973/

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