首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >根据NA计数删除重复记录

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

Stack Overflow用户
提问于 2019-03-11 14:05:20
回答 1查看 180关注 0票数 1

我有一个名为ID的主键的数据集。主键在多个行之间重复。重复的行有不同数量的缺失信息,表示为NA。

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

我已经获得了下面的代码,以便为副本获取grouped_by,但我很难删除具有最多NA的行。

对于下面的数据,我想保留第一行,同时删除第二行和第三行,因为它们比第一行缺少更多的值。

第1行只缺少1值,应该保留,而行2-3分别缺少2和3值。

代码语言:javascript
复制
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
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-03-11 14:18:03

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

代码语言:javascript
复制
library(dplyr)
df %>%
   mutate(n = rowSums(is.na(.))) %>% 
   group_by(ID) %>% 
   slice(which.min(n)) %>% 
   select(-n)

或与data.table类似的逻辑

代码语言:javascript
复制
library(data.table)
setDT(df)[df[, .I[which.min(Reduce(`+`, lapply(.SD, is.na)))], ID]$V1]
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55103654

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档