删除重复项并在 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
不熟悉 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