sql - 删除 R 或 SQL 中最不完整的重复行

标签 sql r duplicates

我有一个这样的数据集:

id_1 <- c(1, 1, 1)
id_2 <- c(2, NA, NA)
day <- c("Mon", "Mon", "Mon")
month <- c("May", NA, "May")
year <- c("2017", NA, NA)

df <- cbind(id_1, id_2, day, month, year)

这些行是我数据中的重复观察。我只想保留最完整的行(即第 1 行)。我的真实数据有 15 列,所以使用
duplicated(df[, <some combination of columns>])

看起来很复杂。有这个功能吗?或者我忽略了一些简单的答案? R 中的答案是首选,但 SQL 也是一种可能性。先感谢您!

编辑:
id_1 和 id_2 都是观察的标识符。 id_1 在此数据中绝对应该是唯一的,但 id_2 可以为 NA 或在某些行中重复。最终我将使用 id_2 将此数据表与另一个数据表合并。这就是为什么我想消除包含 id_2 的行已经捕获的重复信息的行。

最佳答案

id_1是每个“主题”的标识符,那么你可以这样做:

library(tidyverse)

df %>% 
  group_by(id_1) %>%
  filter(rowSums(is.na(.)) == min(rowSums(is.na(.))))

您是否遇到过两行缺失值数量相同,但每行缺失不同值的情况?在这种情况下,您可能希望合并来自不同行的数据以创建包含所有可用数据的单行。

更新:根据@docendodiscimus 的评论,您可以按如下方式缩短代码:
df %>% 
  group_by(id_1) %>%
  slice(which.min(rowSums(is.na(.))))

关于sql - 删除 R 或 SQL 中最不完整的重复行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44206714/

相关文章:

mysql - 排名排行榜 - MySQL

r - 控制回归后fit summary的数字显示

sql apache derby分离/合并重复? (枢轴查询)

Java链表插入方法不重复?

MySQL:多个 SUMS 计算组合值 WHERE 条件

mysql - (MYSQL) SQL 选择查询 - 也许是 OUTER JOIN?

php - Laravel 获得最受欢迎产品

r - 在 R 中拆分的快速替代方案

r - 鼠标悬停填充区域时突出显示边框 - Leaflet-R

javascript - 使用 jQuery 删除重复的输入字段