自从我使用 R 以来已经有一段时间了,所以很抱歉问了这样一个基本的问题:s
我有一个变量,其中包含相同 ID 的基线、4 个月和 12 个月的数据。我本质上是想找出哪些 ID 在 4 个月内丢失了数据,这样我就可以从整个数据集中删除这些 ID。
ID Baseline 4MOS 12MOS
123_ABC 53.5 NA NA
456_DEF 45.1 32.5 12.2
789_GHI 45.4 NA NA
923_JKL 88.4 11.1 23.1
734_BBB 45.4 20.1 NA
343_CHF 22.1 16.1 NA
我已经确定了缺少 4 个月数据的行号:
clean <- which(is.na(df$4MONTHS))
这是我后来尝试将 ID 返回给我的代码,但它只是给了我一条消息“错误:尝试应用非功能”:
clean <- list(df$ID(which(is.na(df$4MOS))))
很高兴感谢您对此的任何帮助!
最佳答案
编辑:
要获取带有 NA
的 ID(这里我们假设所有都是 NA
而不仅仅是任何 NA。在后一种情况下,请使用 anyNA
相反):
df %>%
group_by(ID) %>%
filter(all(is.na(X4MOS))) %>%
pull(ID)
[1] "123_ABC" "789_GHI"
基础
(无分组):
df[is.na(df["X4MOS"]),"ID"]
[1] "123_ABC" "789_GHI"
ORIGINAL:返回所有不NA
dplyr
解决方案:
df %>%
group_by(ID) %>%
filter(!all(is.na(X4MOS)))
# A tibble: 4 x 4
# Groups: ID [4]
ID Baseline X4MOS X12MOS
<chr> <dbl> <dbl> <dbl>
1 456_DEF 45.1 32.5 12.2
2 923_JKL 88.4 11.1 23.1
3 734_BBB 45.4 20.1 NA
4 343_CHF 22.1 16.1 NA
使用基础
(无分组):
df[!is.na(df["X4MOS"]),]
ID Baseline X4MOS X12MOS
2 456_DEF 45.1 32.5 12.2
4 923_JKL 88.4 11.1 23.1
5 734_BBB 45.4 20.1 NA
6 343_CHF 22.1 16.1 NA
数据:
df <- structure(list(ID = c("123_ABC", "456_DEF", "789_GHI", "923_JKL",
"734_BBB", "343_CHF"), Baseline = c(53.5, 45.1, 45.4, 88.4, 45.4,
22.1), X4MOS = c(NA, 32.5, NA, 11.1, 20.1, 16.1), X12MOS = c(NA,
12.2, NA, 23.1, NA, NA)), class = "data.frame", row.names = c(NA,
-6L))
关于r - 如何根据另一个变量的缺失值返回 ID 列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61334227/