查找前半部分与后半部分匹配的字符串

Find strings where the first half matches the second

我有一个由“::”分隔的 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 对,因此解决方案将删除对 B::A 如果 A::B 已经存在。我猜这可以使用 stringr 或正则表达式来解决。

使用 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"

一个选项:

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"