Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/78.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 列表值的所有与所有集合交点_R_Dataframe - Fatal编程技术网

R 列表值的所有与所有集合交点

R 列表值的所有与所有集合交点,r,dataframe,R,Dataframe,我有一个列表L包含数据帧L=(a,B,C,D)。每个数据帧都有一列z。我想在列z中执行一组值的交集,并计算列表中数据帧的每个成对比较的数字。(即,共享的值)以获得最终矩阵 A B C D A B C D 其中,矩阵的值包含共享值数量的总和。我不确定使用R实现这一点的最惯用方法是什么。我可以做一个for循环,从列表的第一个成员开始,提取列z的值,执行一个集合交集并填充一个空矩阵。但可能有更好、更有效的方法 有什么想法和实现吗 例如: df1 <- data.frame(z

我有一个列表
L
包含数据帧
L=(a,B,C,D)
。每个数据帧都有一列
z
。我想在列
z
中执行一组值的交集,并计算列表中数据帧的每个成对比较的数字。(即,共享的值)以获得最终矩阵

  A B C D 
A  
B 
C   
D
其中,矩阵的值包含共享值数量的总和。我不确定使用
R
实现这一点的最惯用方法是什么。我可以做一个for循环,从列表的第一个成员开始,提取列
z
的值,执行一个集合交集并填充一个空矩阵。但可能有更好、更有效的方法

有什么想法和实现吗

例如:

df1 <- data.frame(z=c(1,2,3),s=c(4,5,6))
df2 <- data.frame(z=c(3,2,4),s=c(6,5,4))
my.list <- list(df1, df2)

您可以尝试
outer
功能:

outer(my.list, my.list, function(x, y) Map(function(i, j) length(intersect(i$z, j$z)), x, y))
    df1 df2
df1 3   2  
df2 2   3 

对不起,如果我的外行描述不够简洁。我希望你能明白。我只想通过比较每个df来获得z列中共享的值。因此,在第一个实例中,您将使用intersect(df1$z,df2$z)等生成矩阵。您可能会感兴趣:是否可以返回数据帧?此函数返回一个列表,但不清楚如何返回数据帧。
outer(my.list, my.list, function(x, y) Map(function(i, j) length(intersect(i$z, j$z)), x, y))
    df1 df2
df1 3   2  
df2 2   3