【发布时间】:2021-03-29 23:26:34
【问题描述】:
我有一个由时间序列研究组成的数据集。由于某些参与者在某些日子没有出现,因此他们对数据框的其余部分具有 NA 值,但某些研究日期至关重要,因此我试图将我的数据子集给参与者,以免错过这些关键日子。我的数据集实际上非常大,但总体结构如下:
fakedat <- data.frame(ID = c("A", "A", "A", "A", "B", "B", "B", "B", "C", "C", "C", "C",
"D", "D", "D", "D", "E", "E", "E", "E", "F", "F", "F", "F"),
StudyDay = c(1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4,
1, 2, 3, 4),
Ab = c(10, NA, 15, 10, 10, 20, 10, NA, 10, 10, NA, 30, NA, NA, 15, NA, 10, 20,
10, 30, NA, 10, NA, 20))
现在假设它们在第 2 天和第 4 天出现至关重要,我尝试像这样使用 dplyr 过滤进行子集化:
fakedat2 <- fakedat %>%
dplyr::group_by(ID) %>%
dplyr::filter(StudyDay %in% c(2, 4) & !is.na(Ab)) %>%
dplyr:: ungroup()
编辑:但是如果 ID 的 2 或 4 不是 NA 值,则此数据集的输出只是列表。我需要找到(在我的真实数据中)在 4 个特定研究日具有 NA Ab 值的受试者。 我在下面接受的答案有效,但仍然对执行条件过滤感到好奇?就像在 SAS 中一样,您可以编写“IF Ab!=NA at (StudyDay=2 AND StudyDay=4) THEN ID ....或类似的代码。
【问题讨论】: