查找 R 向量中重复的大量元素

问题描述 投票:0回答:1

我想知道是否有一种简单的方法可以找到多个向量(两个或更多)中的所有重复向量元素(两个或更多)。

例如,给定以下字符向量:

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")

我想说的是:

“约翰和奥利弗前往法国和意大利”,以及 “约翰、迈克尔和鲍勃前往法国和西班牙”,以及 “奥利弗去了法国、意大利和奥地利”

我正在考虑使用二进制矩阵来解决它,使用行作为名称,列作为国家,然后进行迭代,但我认为这在计算上会很昂贵,我正在寻找一种使用可用方法的有效方法。

r vector matrix-multiplication
1个回答
0
投票

您可以在 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 
© www.soinside.com 2019 - 2024. All rights reserved.