【发布时间】:2019-08-01 20:57:23
【问题描述】:
我有一个带有名为 ID 的主键的数据集。主键在多行中重复。重复行具有不同数量的缺失信息,表示为 NA。
我想按主键 ID 分组,然后保留信息最多、NA 最少的记录。
我得到了下面的代码来让我对重复项进行分组,但我正在努力删除具有最多 NA 的行。
对于下面的数据,我想保留第一行,同时删除第二和第三行,因为它们比第一行缺少更多的值。
第 1 行仅缺少 1 个值,应保留,而第 2-3 行分别缺少 2 和 3 个值。
dupes = df %>%
group_by(ID) %>%
filter(n()>1)
ID Product Cost Date Name State
1 X NA 2019 John CA
1 NA 15 NA Bill GA
1 NA NA 2019 NA CA
2 Y 15 2019 Chris CA
【问题讨论】:
-
这不是
df%>% filter(!is.na(Product)) -
公平点,但不是。我将编辑帖子进行说明,但数据集是 30 列,具有大量缺失值的组合。在单个列上按 NA 过滤不会这样做。
-
假设您的 ID 1 的 NA 计数为 10 15 20(在 30 列中),您将保留哪一个
-
我想保留 10,放弃 15 和 20。
-
试试
df %>% mutate(n = rowSums(is.na(.))) %>% group_by(ID) %>% slice(which.min(n))
标签: r filter group-by duplicates