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