删除重复项并在 r data.table 中保留第一个

Drop duplicates and keep first in r data.table

不熟悉 R 很抱歉我找不到这个问题。

假设我有一个此类数据的 IP 网络:

toy_data = data.table(from=c("A","B","A","C","D","C"), to=c("B","A","C","B","A","A"))

from to
A B
B A
A C
C B
D A
C A

我无法在 igraph 中加载整个网络并尝试基于块计算统计信息。因此,鉴于网络是无向的,我想删除所有具有相反模式的行(第 2 行,第 6 行)。

我最初认为这样的事情会起作用: unique(toy_data[,.(c(from,to)|c(to,from))])不幸

我想使用两个辅助列:

toy_data[,orig:=paste(from,to,sep="")]
toy_data[,reverse:=paste(to,from,sep="")]

然后使用类似的东西: unique(df[,.(?)])

但我猜这比我现在做的要容易得多。

不是创建临时列,而是 paste 行最小值 (pmin) 和 max 行 (pmax) 并使用 [= 删除重复项16=] 并否定 (!)

toy_data[!duplicated(paste(pmin(from, to), pmax(from, to)))]

-输出

    from     to
   <char> <char>
1:      A      B
2:      A      C
3:      C      B
4:      D      A