首页 > 解决方案 > 创建捕获 4 个字符串变量中是否缺少字段的变量

问题描述

我正在创建虚拟变量,其中缺失值为 1,非缺失值为 0。缺失值为NA,即:

NA
NA
Positive
NA
Negative

我一次一个变量的代码成功地创建了虚拟变量:

library(dplyr)

#create new dummy variable
df <- mutate(df, newvar = ifelse(is.na(var1), 1,0))

#check
sum(df$newvar == 1)

我有 4 个字符串变量,想创建一个新的虚拟变量,其中任何变量中的缺失值为 1,非缺失值为 0。我尝试重用上面的代码:

mylist <- c("var1", "var2", "var3", "var4")

for(i in mylist){
  df <- mutate(df, newvar = ifelse(is.na(i), 1,0))
}

我知道我错误地使用了for循环,但这是正确的方法,还是我应该做一些不同的事情?

标签: rstringfor-loopmissing-datadummy-variable

解决方案


我们可以mutate使用across

library(dplyr) # version >= 1.0.0  
df <- df %>%
          mutate(across(all_of(mylist), ~ +(is.na(.)), .names = '{col}_newvar'))

如果我们有早期版本,请使用mutate_at

df %>%
   mutate_at(vars(mylist), ~  +(is.na(.)))

如果我们需要创建一个新列来标记“mylist”中的这些列中是否存在任何缺失值

df1 <- df %>%
    mutate(newvar = +(rowSums(is.na(select(., all_of(mylist)))) > 0))

推荐阅读