gpt4 book ai didi

删除重复项,但保留最完整的迭代

转载 作者:行者123 更新时间:2023-12-04 11:15:18 25 4
gpt4 key购买 nike

我试图弄清楚如何根据三个变量( 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 值最高的行。

如果有人能想到更好的方法来做到这一点或让我度过最后一点,我将不胜感激。谢谢大家!

最佳答案

这是一个解决方案。它不是很漂亮,但它应该适用于您的应用程序:

#Order by the degree of completeness    
Original<-Original[order(CompleteNess),]

#Starting from the bottom select the not duplicated rows
#based on the first 3 columns
Original[!duplicated(Original[,1:3], fromLast = TRUE),]

这确实会重新排列您的原始数据框,因此请注意以后是否有其他处理。

关于删除重复项,但保留最完整的迭代,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39152650/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com