gpt4 book ai didi

R:删除具有非缺失变量完全重叠的重复行

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

许多以前的问题强调了删除具有缺失值的重复行的各种方法,但是没有一个涉及以下情况。示例起始数据:

df <- data.frame(x = c(1, NA, 1), y=c(NA, 1, 1), z=c(0, NA, NA))
print(df)

期望的输出:

df2 <- data.frame(x = c(1, 1), y=c(NA, 1), z=c(0, NA))
print(df2)

在这种情况下,第二行被删除,因为它是第 3 行的完美子集。在实际应用程序中,我想删除包含非缺失列中所有冗余信息的行,并保留总体缺失较少的行.

我认为这可以使用 dplyr 和按行应用 distinct() 来完成,但无济于事。我可以用一个非常慢的 for 循环来做到这一点,但是对于数百列和数千行,这是一个糟糕的选择。

最佳答案

这是使用 data.table 的另一个选项:

library(data.table)
#convert into long format and discard NAs
mDT <- melt(setDT(df)[, rn := .I], id.var="rn", na.rm=TRUE)[, cnt := .N , rn]

#self join and filter for rows that match to other rows
merged <- mDT[mDT, on=.(variable, value), {
diffrow <- i.rn!=x.rn
.(irn=i.rn[diffrow], xrn=x.rn[diffrow], icnt=i.cnt[diffrow])
}]

#count the occurrence and delete rows where all values are matched to another row
ix <- merged[, xcnt := .N, .(irn, xrn)][
icnt==xcnt]$irn

#delete dupe rows
df[-ix]

关于R:删除具有非缺失变量完全重叠的重复行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62454840/

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