为 R 中数据框的每一行返回缺少 (NA) 数据的列名列表

标签 r dplyr na

我正在尝试为数据框中的每个 ID# 创建一个包含 NA 值的数据列表,以便我可以跟踪丢失的数据。我有一个数据框,其中每一行都是一个 ID#,每一列都是一个变量名。每个 ID# 可能有不同的缺失数据,因此我想将此信息压缩到一个包含两列表的表格中。目前,我的表看起来像这样:

ID  Var1 Var2 Var3 Var4 Var5
1   10   T    NA   2    NA
2   15   F    50   2    NA
3   12   NA   41   2    NA
4   NA   NA   NA   1    NA
5   NA   F    NA   NA   NA
...

我希望得到看起来像这样的输出:

ID   Missing Variables
1    Var3, Var5
2    Var5
3    Var2, Var5
4    Var1, Var2, Var3, Var5
5    Var1, Var3, Var4, Var5
...

我很困惑如何返回每个缺失数据条目的列名。我知道你可能可以用 for 循环做这样的事情,但除此之外我有点迷路了。非常感谢任何帮助!

最佳答案

这是一个 tidyverse 解决方案。

df <- read_table("
ID  Var1 Var2 Var3 Var4 Var5
1   10   T    NA   2    NA
2   15   F    50   2    NA
3   12   NA   41   2    NA
4   NA   NA   NA   1    NA
5   NA   F    NA   NA   NA", col_names = TRUE)

library(dplyr)
library(tidyr)
df %>%
  mutate(across(starts_with("var"), is.na)) %>%  # replace all NA with TRUE and else FALSE
  pivot_longer(-ID, names_to = "var") %>%  # pivot longer
  filter(value) %>%   # remove the FALSE rows
  group_by(ID) %>%    # group by the ID
  summarise(`Missing Variables` = toString(var)) # convert the variable names to a string column

`summarise()` ungrouping output (override with `.groups` argument)
# A tibble: 5 x 2
     ID `Missing Variables`   
  <dbl> <chr>                 
1     1 Var3, Var5            
2     2 Var5                  
3     3 Var2, Var5            
4     4 Var1, Var2, Var3, Var5
5     5 Var1, Var3, Var4, Var5

关于为 R 中数据框的每一行返回缺少 (NA) 数据的列名列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64448066/

相关文章:

将 NA 替换为 NA 前后情况的平均值

r - 根据多个因素创建分组图

r - 用日期的最大值在 dplyr 中汇总 - R

r - 为什么有人应该使用 {} 来初始化 R 中的空对象?

r - 在shiny应用程序中导出rCharts生成的图表

r - tidyverse:汇总时计算特定级别的数量

r - 计算 Sum 列并忽略 Na

r - 是否可以在数据框中不显示 NA?

r - 在R中的data.table上撤消setkey()

r - 缺失值 true/false : error in loop not in one-off