如何使用 ifelse 基于具有 NA 值的多个列创建多个标志列?
How do I create multiple flag columns based on multiple columns with NA Values using ifelse?
我先尝试使用这个:
for (i in names(data)){
data[paste0('FLAG_NA_',i)]<- ifelse(is.na(data$i),1,0)
}
但是这段代码只创建了只有 NA 值的新列
我在这里找到了与我想要的类似的解决方案:。
答案是:
data %>%
mutate(across(starts_with('C'), ~ifelse( .x == "Off", 1, 0), .names = 'scr_{sub("C", "", .col)}'))
但是当我尝试在代码中使用 is.na() 条件时,它不起作用:
data %>%
mutate(across(names(data), ~ifelse( .x %>% is.na, 1, 0), .names = paste0('FLAG_NA_',names(data))))
错误信息:
Error: Problem with `mutate()` input `..1`.
i `..1 = across(...)`.
x All unnamed arguments must be length 1
across
中的.names
不应该是向量。它应该是一个单一的字符值,作为名称的“胶水规范”,使用“{.col} 代表选定的列名,{.fn} 代表所应用的函数的名称”。所以在这种情况下,您可以使用 'FLAG_NA_{.col}'
,生成以下输出。
## Example data
set.seed(2022)
library(magrittr)
data <-
letters[1:3] %>%
setNames(., .) %>%
purrr::map_dfc(~ sample(c(1, NA, 3), 5, T))
data
#> # A tibble: 5 × 3
#> a b c
#> <dbl> <dbl> <dbl>
#> 1 3 3 3
#> 2 NA NA 1
#> 3 3 3 NA
#> 4 3 1 3
#> 5 NA NA NA
## Create new variables
library(dplyr, warn.conflicts = FALSE)
data %>%
mutate(across(everything(), ~ as.numeric(is.na(.x)),
.names = 'FLAG_NA_{.col}'))
#> # A tibble: 5 × 6
#> a b c FLAG_NA_a FLAG_NA_b FLAG_NA_c
#> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
#> 1 3 3 3 0 0 0
#> 2 NA NA 1 1 1 0
#> 3 3 3 NA 0 0 1
#> 4 3 1 3 0 0 0
#> 5 NA NA NA 1 1 1
由 reprex package (v2.0.1)
创建于 2022-02-17
我先尝试使用这个:
for (i in names(data)){
data[paste0('FLAG_NA_',i)]<- ifelse(is.na(data$i),1,0)
}
但是这段代码只创建了只有 NA 值的新列
我在这里找到了与我想要的类似的解决方案:
答案是:
data %>%
mutate(across(starts_with('C'), ~ifelse( .x == "Off", 1, 0), .names = 'scr_{sub("C", "", .col)}'))
但是当我尝试在代码中使用 is.na() 条件时,它不起作用:
data %>%
mutate(across(names(data), ~ifelse( .x %>% is.na, 1, 0), .names = paste0('FLAG_NA_',names(data))))
错误信息:
Error: Problem with `mutate()` input `..1`.
i `..1 = across(...)`.
x All unnamed arguments must be length 1
across
中的.names
不应该是向量。它应该是一个单一的字符值,作为名称的“胶水规范”,使用“{.col} 代表选定的列名,{.fn} 代表所应用的函数的名称”。所以在这种情况下,您可以使用 'FLAG_NA_{.col}'
,生成以下输出。
## Example data
set.seed(2022)
library(magrittr)
data <-
letters[1:3] %>%
setNames(., .) %>%
purrr::map_dfc(~ sample(c(1, NA, 3), 5, T))
data
#> # A tibble: 5 × 3
#> a b c
#> <dbl> <dbl> <dbl>
#> 1 3 3 3
#> 2 NA NA 1
#> 3 3 3 NA
#> 4 3 1 3
#> 5 NA NA NA
## Create new variables
library(dplyr, warn.conflicts = FALSE)
data %>%
mutate(across(everything(), ~ as.numeric(is.na(.x)),
.names = 'FLAG_NA_{.col}'))
#> # A tibble: 5 × 6
#> a b c FLAG_NA_a FLAG_NA_b FLAG_NA_c
#> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
#> 1 3 3 3 0 0 0
#> 2 NA NA 1 1 1 0
#> 3 3 3 NA 0 0 1
#> 4 3 1 3 0 0 0
#> 5 NA NA NA 1 1 1
由 reprex package (v2.0.1)
创建于 2022-02-17