仅返回 R 中所有其他列的列 ID 和年份缺失 (NA) 数据的列表

问题描述 投票:0回答:1
身份证号码 年份 数学子 Eng_sub Chem_sub Comp_sub
1 2010 20 15 12 不适用
2 2015 17 20 14 16
3 2012 不适用 17 12 不适用
4 2015 14 13 不适用 不适用
5 2016 不适用 不适用 不适用 不适用
6 2015 不适用 不适用 不适用 不适用

您好,我想知道上表中哪个 ID 和哪个年份的所有主题列的人员都是 NA。结果应如下所示:

身份证号码 年份
5 2016
6 2015

我已经按照下面的代码尝试了一些方法,但它没有给我理想的答案。

df %>%
  mutate(across(ends_with("sub"), is.na)) %>%  
  pivot_longer(-ID, names_to = "sub") %>%  
  filter(value) %>% 
  group_by(ID) %>%
  summarise(`Missing Variables` = toString(sub))

另外,我想知道是否有一种方法可以仅在某些列上进行变异,例如仅数学和比较,并查看哪个 ID 和年份同时具有这些科目 NA?

非常感谢!

r dplyr tidyr
1个回答
0
投票

这是一个基本的 R 方法:

sub_cols <- grep("sub$", names(dat), value = TRUE)

dat[
    rowSums(is.na(dat[sub_cols])) == length(sub_cols),
    c("ID", "Year")
]
#   ID Year
# 5  5 2016
# 6  6 2015

数据

dat <- structure(list(ID = 1:6, Year = c(2010L, 2015L, 2012L, 2015L, 
2016L, 2015L), Maths_sub = c(20L, 17L, NA, 14L, NA, NA), Eng_sub = c(15L, 
20L, 17L, 13L, NA, NA), Chem_sub = c(12L, 14L, 12L, NA, NA, NA
), Comp_sub = c(NA, 16L, NA, NA, NA, NA)), class = "data.frame", row.names = c(NA, -6L))
© www.soinside.com 2019 - 2024. All rights reserved.