创建捕获 4 个字符串变量中是否缺少字段的变量

Create variable that captures if there are missing fields in 4 string variables

我正在创建虚拟变量,其中缺失值为 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 循环,但这是正确的方法吗,还是我应该做些不同的事情?

我们可以使用 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))