创建用于捕获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),0))
}

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

解决方法

我们可以将mutateacross一起使用

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))