【问题标题】:How do I return a list of IDs based on missing values of another variable?如何根据另一个变量的缺失值返回 ID 列表?
【发布时间】:2020-04-21 00:33:59
【问题描述】:

自从我使用 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))))

非常感谢任何帮助:这个!

【问题讨论】:

  • 应该全部丢失 4 Mos 还是 4Mos 中的任何丢失?
  • 嗨@NelsonGon! 4MOS中只有部分ID有缺失数据(即123_ABC和789_GHI)。
  • 当您使用运算符$ 时,您可能会遇到第一个字符为数字的列名称的问题。尝试更改列名或使用语法df[, "4MOS"] 选择列。

标签: r dataframe missing-data


【解决方案1】:

编辑

要获得带有NAs 的ID(这里我们假设所有都是NA 而不仅仅是任何NA。在后一种情况下,请改用anyNA):

df %>% 
   group_by(ID) %>% 
   filter(all(is.na(X4MOS))) %>% 
   pull(ID)
[1] "123_ABC" "789_GHI"

base(无分组):

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 

base(无分组):

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))

【讨论】:

  • 感谢您的回复@NelsonGon!我想我的问题措辞有点不同,但我明白你在这里做了什么。我的意思是如何根据缺少 4MOS 数据的人获得向量或 ID 列表。 (即得到[123_ABC, 789_GHI]的向量)
  • 非常感谢,是的,这就是我要找的!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-11-06
  • 1970-01-01
  • 1970-01-01
  • 2016-06-18
  • 1970-01-01
  • 2022-01-10
  • 1970-01-01
相关资源
最近更新 更多