在表格或矩阵中可视化数据框的交集

3
我是一名帮助翻译的助手。
我有三个数据框,想要将它们之间的交集可视化。假设我有以下三个数据框:
length(df1) 
length(df2) 
length(df3) 

[1] 283
[1] 290
[1] 295

我现在可以通过使用intersect()来展示不同集合之间的交集。

length(intersect(df1, df2)
length(intersect(df1, df3)
length(intersect(df2, df3)

[1] 96
[1] 227
[1] 98

虽然这个方法可以给我答案,但我正在使用RMarkdown并且希望找到一种更容易查看交集的方法。我可能会处理更多的数据框,并希望找到一个可扩展的解决方案。

我想知道是否有一种在表格或矩阵中显示交集的方法,就像下面所示:

    | df1 | df2 | df3 |
----|-----|-----|-----|
df1 | 283 |  96 | 227 |
df2 |  96 | 290 |  98 |
df3 | 227 |  98 | 295 |

这是否可能?更好的是,是否有一个解决方案可以在 RMD 中呈现得很好,或者与 knitr::kable 兼容?


你如何在两个数据框上使用 intersect(df1, df2),或者使用 length() 统计一个 data.frame 的行数? - thelatemail
2个回答

2
可能有一个包可以做到这一点,但自己构建也很容易:
给定您的数字:
#your values
upper_lower <- c(96, 227, 98)
diagonal <- c(283, 290, 295)

#constructing the matrix
#make empty matrix
mat <- matrix(NA, ncol=3, nrow=3)
#add the values to the lower and upper matrix
mat[upper.tri(mat)] <- mat[lower.tri(mat)] <- upper_lower
#add the diagonal
diag(mat) <- diagonal
#give the names
colnames(mat) <- c('df1', 'df2', 'df3')
rownames(mat) <- c('df1', 'df2', 'df3')

结果:

mat
#    df1 df2 df3
#df1 283  96 227
#df2  96 290  98
#df3 227  98 295

太完美了!我也可以将矩阵放入 kable 中。谢谢! - JKing

2

暂时不考虑我的评论,你应该能够使用?outer来半自动地生成所需的矩阵输出。以这3个向量为例:

Original Answer翻译成"最初的回答"

v1 <- 1:8
v2 <- 4:9
v3 <- 6:12

ldf <- mget(c("v1","v2","v3"))
outer(ldf, ldf, FUN=function(x,y) lengths(Vectorize(intersect)(x,y)))
#   v1 v2 v3
#v1  8  5  3
#v2  5  6  4
#v3  3  4  7

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接