r - 根据 NA 计数删除重复记录
问题描述
我有一个名为 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
解决方案
一种选择是根据NA
每行中的 s 数创建条件,即在按“ID”分组后slice
,具有最少NA
元素数的行
library(dplyr)
df %>%
mutate(n = rowSums(is.na(.))) %>%
group_by(ID) %>%
slice(which.min(n)) %>%
select(-n)
或类似的逻辑data.table
library(data.table)
setDT(df)[df[, .I[which.min(Reduce(`+`, lapply(.SD, is.na)))], ID]$V1]
推荐阅读
- ubuntu - 阻止域指向我的服务器 IP
- php - Laravel 查询范围以在相关模型的时间范围内选择没有日期的用户模型
- html - 背景模糊的聚焦广场
- excel - 读/写时会计单元格类型发生变化 - Excel VBA
- c# - PuppeteerSharp ClickAsync 获取内容
- graphql - Apollo GraphQL 传递对象
- javascript - 谷歌地图 - 禁用地图图块并仅显示多边形形状
- excel - Excel 复制到 Word VBA
- javascript - 错误 [BAN_RESOLVE_ID]:无法将用户 ID 解析为解禁
- python - 在 Caret 文本编辑器中工作时如何查看 html 项目?