我有一个IP地址对列表,用":"分隔:&";。
ip_pairs <- c("104.124.199.136::192.168.1.67", "104.124.199.136::192.168.137.174", "192.168.1.67::104.124.199.136", "192.168.137.174::104.124.199.136")
正如你所看到的,向量的第三个和第四个元素与前两个元素相同,但相反(我的实际问题是找到IP的所有唯一配对,所以如果A::B已经存在,解决方案会删除对B::A。我猜这可以使用stringr或regex来解决。
一个选项:
library(stringr)
split_function = function(x) {
x = sort(x)
paste(x, collapse="::")
}
pairs = str_split(ip_pairs, "::")
unique(sapply(pairs, split_function))
[1] "104.124.199.136::192.168.1.67" "104.124.199.136::192.168.137.174"
使用read.table
从对中创建一个两列数据帧,对每一行进行排序,并使用duplicated
查找重复数据。然后提取出不重复的。未使用任何程序包。
DF <- read.table(text = ip_pairs, sep = ":")[-2]
ip_pairs[! duplicated(t(apply(DF, 1, sort)))]
## [1] "192.168.1.67::104.124.199.136" "192.168.137.174::104.124.199.136"