问题描述
我有下面列出的格式的数据,其中我需要处理的所有变量都是NA
或变量的名称,我需要将Nas更改为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(v0.3.0)于2021-01-13创建
推荐答案
我想您可以这样做:
library(tidyverse)
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(.cols = everything(),
.fns = ~ ifelse(is.na(.x) == TRUE, 0, 1)))
# A tibble: 4 x 4
black grey white purple
<dbl> <dbl> <dbl> <dbl>
1 0 1 0 1
2 0 0 1 0
3 1 0 0 0
4 0 1 0 0