列表r的成对比较表

发布于 2025-01-19 07:20:43 字数 461 浏览 1 评论 0原文

我有一个包含 4 个带有术语(字符)的向量的列表。我正在寻找一个包含术语成对比较的表格。每次成对比较中有多少个相等?

这是一个例子:

set.seed(20190708)
genes <- paste("gene",1:1000,sep="")
x <- list(
  A = sample(genes,300), 
  B = sample(genes,525), 
  C = sample(genes,440),
  D = sample(genes,350)
)

这是我正在寻找的:

在此处输入图像描述

这些是两组中出现的术语数量。

I have a list of 4 vectors with terms (characters). I'm looking to obtain a table with the pairwise comparison of the terms. How many are equal in each pairwise comparison?

Here is an example:

set.seed(20190708)
genes <- paste("gene",1:1000,sep="")
x <- list(
  A = sample(genes,300), 
  B = sample(genes,525), 
  C = sample(genes,440),
  D = sample(genes,350)
)

And here is what I'm looking for:

enter image description here

Those are the number of terms present in both groups.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

帅哥哥的热头脑 2025-01-26 07:20:43

如果我们想要对称矩阵作为输出,我们可以使用ofter,而as.dist将结果呈现为下三角。

out <- outer(x, x, FUN = Vectorize(function(u, v) length(intersect(u, v))))
as.dist(out)
#>     A   B   C
#> B 151        
#> C 128 228    
#> D 133 187 150

或者如果没有镜子重复

out <- combn(x, 2, FUN = function(x) length(intersect(x[[1]], x[[2]])))
names(out) <- combn(names(x), 2, FUN = paste, collapse = "_")
stack(out)[2:1]
ind values
1 A_B    151
2 A_C    128
3 A_D    133
4 B_C    228
5 B_D    187
6 C_D    150

We may use outer if we want a symmetric matrix as output, and as.dist to present the result as just the lower triangle.

out <- outer(x, x, FUN = Vectorize(function(u, v) length(intersect(u, v))))
as.dist(out)
#>     A   B   C
#> B 151        
#> C 128 228    
#> D 133 187 150

Or if it is just pairwise comparison without the mirror duplicates

out <- combn(x, 2, FUN = function(x) length(intersect(x[[1]], x[[2]])))
names(out) <- combn(names(x), 2, FUN = paste, collapse = "_")
stack(out)[2:1]
ind values
1 A_B    151
2 A_C    128
3 A_D    133
4 B_C    228
5 B_D    187
6 C_D    150
怎会甘心 2025-01-26 07:20:43

这是另一个基本 R 选项

> crossprod(table(stack(x)))
   ind
ind   A   B   C   D
  A 300 151 128 133
  B 151 525 228 187
  C 128 228 440 150
  D 133 187 150 350

> as.dist(crossprod(table(stack(x))))
    A   B   C
B 151
C 128 228
D 133 187 150

Here is another base R option

> crossprod(table(stack(x)))
   ind
ind   A   B   C   D
  A 300 151 128 133
  B 151 525 228 187
  C 128 228 440 150
  D 133 187 150 350

or

> as.dist(crossprod(table(stack(x))))
    A   B   C
B 151
C 128 228
D 133 187 150
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文