我想知道是否有一种简单的方法可以找到多个向量(两个或更多)中的所有重复向量元素(两个或更多)。
例如,给定以下字符向量:
France <- c("John", "Michael" , "Bob", "Oliver")
Italy <- c("Hugo", "Oliver, "Soren", "Jackson", "John")
Spain <- c("Joseph", "David", "Bob", "John", "Leo", "Michael")
Austria <- c("Oliver", "Giovanni", "Luka")
我想说的是:
“约翰和奥利弗前往法国和意大利”,以及 “约翰、迈克尔和鲍勃前往法国和西班牙”,以及 “奥利弗去了法国、意大利和奥地利”
我正在考虑使用二进制矩阵来解决它,使用行作为名称,列作为国家,然后进行迭代,但我认为这在计算上会很昂贵,我正在寻找一种使用可用方法的有效方法。
您可以在 igraph 库的帮助下完成此操作。例如,首先让我们重塑数据
France <- c("John", "Michael" , "Bob", "Oliver")
Italy <- c("Hugo", "Oliver", "Soren", "Jackson", "John")
Spain <- c("Joseph", "David", "Bob", "John", "Leo", "Michael")
Austria <- c("Oliver", "Giovanni", "Luka")
pairs <- stack(tibble::lst(France, Italy, Spain, Austria))
head(pairs)
# values ind
# 1 John France
# 2 Michael France
# 3 Bob France
# 4 Oliver France
# 5 Hugo Italy
# 6 Oliver Italy
那就让图表来帮忙吧
library(igraph)
adjm <- pairs |>
graph_from_data_frame(directed=FALSE) |>
as_adjacency_matrix(sparse=FALSE)
adjm[rownames(adjm) %in% pairs$values, colnames(adjm) %in% pairs$ind]
# France Italy Spain Austria
# John 1 1 1 0
# Michael 1 0 1 0
# Bob 1 0 1 0
# Oliver 1 1 0 1
# Hugo 0 1 0 0
# Soren 0 1 0 0
# Jackson 0 1 0 0
# Joseph 0 0 1 0
# David 0 0 1 0
# Leo 0 0 1 0
# Giovanni 0 0 0 1
# Luka 0 0 0 1