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

Drop duplicates and keep first in r data.table

提问人:KArrow'sBest 提问时间:3/26/2022 更新时间:3/26/2022 访问量:496

问:

不熟悉 R 对不起,我还找不到这个问题。

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

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

一个 B
B 一个
一个 C
C B
D 一个
C 一个

我无法在 igraph 中加载整个网络并尝试根据块计算统计数据。因此,鉴于网络是无向的,我想删除所有具有相反 from-to 模式的行(第 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[,.(?)])

但我的猜测是,这比我正在做的事情要容易得多。

r data.table 数据操作

评论


答:

2赞 akrun 3/26/2022 #1

与其创建临时列,不如将最小值乘以 () 与行 () 并删除重复项,并否定 (pastepminmaxpmaxduplicated!)

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