身份证号码 | 年份 | 数学子 | 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 方法:
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))