r - 根据每行中的缺失值选择列
问题描述
我想知道(对于每一行)我的数据中的任何 NA 属于哪些列。目标是创建一个新的列/变量,列出数据显示为 NA 的列的名称,对于该特定行,最好使用 dplyr。
使用这个模拟数据,
data = tibble(var_1 = c(NA, 4, 5, 6, 7), var_2 = c(4, 5, 6, 7, 8), var_3 = c(NA, NA, NA, 3, 5))
我想创建 missing_col 列:
var_1 var_2 var_3 missing_col
1 NA 4 NA "var_1", "var_3"
2 4 5 NA "var_3"
3 5 6 NA "var_3"
4 6 7 3 NA
5 7 8 5 NA
到目前为止,我的方法是将 rowwise() 函数与 mutate 以及嵌套的 select_if() 和函数结合使用。但是,到目前为止,我尝试过的所有功能都不允许我单独考虑每一行(而不是整列)。下面我介绍了我的方法的一般结构。
data %>%
rowwise() %>%
mutate(missing_col = select_if(function(x) ... )) %>%
names()
任何有关适当功能的指导将不胜感激。
解决方案
你可以试试这个:
#Unlist the results from apply
missing_col=unlist(x=apply(X=data, MARGIN=1, FUN=function(x){
#Get the names of the rows which have NA
NamesNA=names(which(is.na(x)))
#If there's no NA then replace the 'character(0)' for NA.
if(length(NamesNA)!=0){
#Concatenate names if there are more than one
paste0(NamesNA, collapse=",")
}else{
#Replace 'character(0)'
NA
}
})
)
#Add column with desired output
data$missing_col=missing_col
这给出了所需的输出:
# A tibble: 5 x 4
var_1 var_2 var_3 missing_col
<dbl> <dbl> <dbl> <chr>
1 NA 4 NA var_1,var_3
2 4 5 NA var_3
3 5 6 NA var_3
4 6 7 3 NA
5 7 8 5 NA
推荐阅读
- bixby - 您如何测试访问用户个人资料的胶囊?
- angular - 对空白 ID 的 Http.post 和 app-console 内容运行测试已通过
- linux - 在下面的行中提取一个值并将结果写在原始搜索词旁边(linux)
- c++ - 如果我们在无限循环中等待响应,通过 wininet 进行的异步调用会成功完成吗?
- microsoft-graph-api - 使用 API Graph 在驱动器之间复制文件时出错
- python - 将一种热编码写入 csv
- json - MongoDB一对多数据结构困境
- classification - 将 GPS 数据聚类为“k”组
- wordpress - 如何更改帖子类型“页面”上 CPT 循环的摘录长度?
- python - 如果同一索引处的值相等,则删除两个列表的尾随项