R语言 计算多个向量之间的成对交集

am46iovg  于 2022-12-06  发布在  其他
关注(0)|答案(1)|浏览(158)

我有多个 Dataframe ,如下所示:

>df1

NAME    
Josh
Sarah
Sammy
Jake

>df2

NAME    
Josh
Sarah
Sammy
Mark

>df3

NAME    
Josh
Michael
Mike
Adam 

>df4
NAME
Josh
Michael
Mike
Adam

我想创建一个新的 Dataframe ,其中包含这些DFS具有的交集的数量,如下所示

>df.final
    df1 df2 df3 df4
df1   4   3   1   4
df2   3   4   1   1
df3   1   1   4   4
df4   1   1   4   4

我该如何实现这一点呢?本质上,我希望自动化intersect()length()函数,而不需要手动输入它们。

#create the data
df1 <- data.frame(NAME=c("Josh", "Sarah", "Sammy", "Jake"))
df2 <- data.frame(NAME=c("Josh", "Sarah", "Sammy", "Mark"))
df3 <- data.frame(NAME=c("Josh", "Michael", "Mike", "Adam"))
df4 <- data.frame(NAME=c("Josh", "Michael", "Mike", "Adam"))
cngwdvgl

cngwdvgl1#

#create the data
df1 <- data.frame(NAME=c("Josh", "Sarah", "Sammy", "Jake"))
df2 <- data.frame(NAME=c("Josh", "Sarah", "Sammy", "Mark"))
df3 <- data.frame(NAME=c("Josh", "Michael", "Mike", "Adam"))
df4 <- data.frame(NAME=c("Josh", "Michael", "Mike", "Adam"))

l <- c("df1","df2","df3","df4")
names(l) <- l
result <- outer(mget(l),mget(l), function(x,y) 
  mapply(function(x,y) length(intersect(x$NAME , y$NAME)),x,y ) )

result
#>     df1 df2 df3 df4
#> df1   4   3   1   1
#> df2   3   4   1   1
#> df3   1   1   4   4
#> df4   1   1   4   4

编辑

矢量化也可以:

result <- outer(mget(l),mget(l), Vectorize(
  function(x,y) length(intersect(x$NAME , y$NAME))))

相关问题