删除一列中所有重复测量的变量中至少有一个 NA 值的个体

时间:2021-04-19 19:01:16

标签: r na

我是 R 新手,想寻求帮助。

我有一个具有以下结构的数据框:

DF <- data.frame(patient = c(1, 1, 2, 2, 3, 3), treatment = c("baseline", "on-treatment", "baseline", "on-treatment", "baseline", "on-treatment"), cholesterol_value = c(300, 100, 255, NA, 270, 150))

患者 2 具有基线胆固醇值,但没有治疗中的胆固醇值。

我想找到一种方法,在 for 循环中删除与患者 2 对应的所有值,只保留与患者 1 和 3 对应的值。

有人可以帮我吗?

谢谢!

3 个答案:

答案 0 :(得分:2)

library(tidyverse)

DF %>%
  group_by(patient) %>%
  filter(!any(is.na(cholesterol_value)))

答案 1 :(得分:1)

使用 base R

subset(DF, !patient %in% unique(patient[is.na(cholesterol_value)]))

答案 2 :(得分:1)

这是另一个使用 ´aveinsubset` 的基本 R 选项

subset(
  DF,
  !ave(is.na(cholesterol_value), patient, FUN = any)
)

给出

  patient    treatment cholesterol_value
1       1     baseline               300
2       1 on-treatment               100
5       3     baseline               270
6       3 on-treatment               150