r - 创建捕获 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
循环,但这是正确的方法,还是我应该做一些不同的事情?
解决方案
我们可以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))
推荐阅读
- javafx - JavaFX应用程序中的实时XChart
- android - github上的cherrypicking提交,一些基本东西的问题
- android - 在视频上添加水印
- javascript - Alasql - 使用 Wraptext 和多个工作表创建 Excel
- python-3.x - 容器在 Google Cloud Shell 中启动,但在 Kubernetes Engine 上失败
- mysql - 使用 3 个条件和 1 个顺序对大型 MySQL 表执行长查询
- java - java Servlets加2个数
- api - Skype for Business Online 管理 API
- ocaml - 找不到记录字段注释
- html - 如何将所有星级评分放在同一行?