【发布时间】:2016-08-26 03:43:49
【问题描述】:
我试图弄清楚如何根据三个变量 (id, key, and num) 删除重复项。我想删除填充最少列的重复项。如果填充的数量相同,则可以删除其中任何一个。
例如,
Original <- data.frame(id= c(1,2,2,3,3,4,5,5),
key=c(1,2,2,3,3,4,5,5),
num=c(1,1,1,1,1,1,1,1),
v4= c(1,NA,5,5,NA,5,NA,7),
v5=c(1,NA,5,5,NA,5,NA,7))
输出如下:
Finished <- data.frame(id= c(1,2,3,4,5),
key=c(1,2,3,4,5),
num=c(1,1,1,1,1),
v4= c(1,5,5,5,7),
v5=c(1,5,5,5,7))
我的真实数据集更大,并且混合了大部分数字变量,但还有一些字符变量,但我无法确定执行此操作的最佳方法。我以前使用过一个程序,它可以在名为 check.all 的重复命令中执行类似的操作。
到目前为止,我的想法是使用 grepl 并确定“任何东西”在哪里
Present <- apply(Original, 2, function(x) grepl("[[:alnum:]]", x))
然后,使用生成的数据框,我要求 rowSums 并将其 Cbind 到原始数据。
CompleteNess <- rowSums(Present)
cbind(Original, CompleteNess)
这是我不确定下一步要做什么的地方...我有一个变量告诉我每行填充了多少列(CompleteNess);但是,我不确定如何实现重复。
简单地说,我正在寻找当 id、key 和 num 重复时 - 保留 CompleteNess 值最高的行。
如果有人能想到更好的方法来做到这一点或让我度过最后一点,我将不胜感激。谢谢大家!
【问题讨论】:
标签: r duplicates