根据NA计数删除重复的记录

时间:2019-03-11 14:05:21

标签: r filter group-by duplicates

我有一个带有名为ID的主键的数据集。主键跨多个行重复。重复的行具有表示为NA的不同数量的丢失信息。

我想按主键ID分组,然后保留信息最多,NA最少的记录。

我已经获得了以下代码,将重复项设为grouped_by,但是我正在努力删除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

1 个答案:

答案 0 :(得分:1)

一种选择是根据每行中NA的个数创建一个条件,即在按“ ID”分组后,slice具有最少{{1}的行}元素

NA

或与library(dplyr) df %>% mutate(n = rowSums(is.na(.))) %>% group_by(ID) %>% slice(which.min(n)) %>% select(-n)

类似的逻辑
data.table