gpt4 book ai didi

r - 如何仅识别 "not duplicated"行

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

我有这样的情况。
多个data.table“绑定(bind)”。

library(data.table)
x <- data.table(id=c(1,2,3,4),dsp=c(5,6,7,8),status=c(FALSE,TRUE,FALSE,TRUE))
y <- data.table(id=c(1,2,3,4),dsp=c(6,6,7,8),status=c(FALSE,FALSE,FALSE,TRUE))
z <- data.table(id=c(1,2,3,4),dsp=c(5,6,9,8),status=c(FALSE,TRUE,FALSE,FALSE))
w <- data.table(id=c(1,2,3,4),dsp=c(5,6,7,NA),status=c(FALSE,TRUE,FALSE,TRUE))
setkey(x,id)
setkey(y,id)
setkey(z,id)
setkey(w,id)
Bigdt<-rbind(x,y,z,w)

我只想获得不重复的行,例如:
id  dsp status
1 6 FALSE
2 6 FALSE
3 9 FALSE
4 8 FALSE
4 NA TRUE

所以我尝试了
Resultdt<-Bigdt[!duplicated(Bigdt)]

但结果:
id  dsp status
1 5 FALSE
2 6 TRUE
3 7 FALSE
4 8 TRUE

不符合我的看法。
我尝试了不同的方法(因为 rbind 不是强制性的),例如合并、连接等。 data.table 包似乎可能是包含解决方案的包......显然。有任何想法吗?

最佳答案

你可以做

Bigdt[, .N, by=names(Bigdt)][N == 1L][, N := NULL][]

id dsp status
1: 1 6 FALSE
2: 2 6 FALSE
3: 3 9 FALSE
4: 4 8 FALSE
5: 4 NA TRUE

要查看它是如何工作的,只需运行 DT[][][][] 的一部分即可。链:
  • Bigdt[, .N, by=names(Bigdt)]
  • Bigdt[, .N, by=names(Bigdt)][N == 1L]
  • Bigdt[, .N, by=names(Bigdt)][N == 1L][, N := NULL]
  • 关于r - 如何仅识别 "not duplicated"行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37486617/

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