我有一个这样的数据集:
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/