我有一个矩阵,其中每行都是一个样本,每列都是一个物种(样本 X 物种矩阵)。我想知道有多少样本(行)存在相同的两个未指定物种(正值)。例如:
> df <- matrix(c(1,0,10,1,8,1,0,1,0,0,1,0),nrow=4,ncol=3)
> colnames(df) <- letters[1:3]
> df
a b c
[1,] 1 8 0
[2,] 0 1 0
[3,] 10 0 1
[4,] 1 1 0
这里,我有 4 个样本,其中记录了物种 a、b 和 c 的丰度。 (对我来说)棘手的部分是我不在乎这两个物种是什么。因此,我需要对列的每个成对*组合进行排列,并让 R 返回每个成对组合一起找到的频率(行数)(以及它们是什么)。第三种是否存在无关紧要。在这个例子中,答案是:
a 和 b 在 2 个样本中同时出现。
a 和 c 在 1 个样本中同时出现。
b 和 c 在 0 个样本中同时出现。
我非常感谢任何帮助或建议来解决这个问题。非常感谢!
*我随意使用了2个物种作为例子。
最佳答案
您可以使用combn
,如下所示:
df <- matrix(c(1,0,10,1,8,1,0,1,0,0,1,0),nrow=4,ncol=3)
colnames(df) <- letters[1:3]
df
combn(colnames(df), 2, FUN = function(x) {
sum(as.logical(df[, x[1]]) & as.logical(df[, x[2]]))
})
# [1] 2 1 0
姓名:
unlist(combn(colnames(df), 2, FUN = function(x) {
setNames(sum(as.logical(df[, x[1]]) & as.logical(df[, x[2]])),
paste(x, collapse = "_"))
}, simplify = FALSE))
# a_b a_c b_c
# 2 1 0
关于r - 根据矩阵中列的排列,有多少行满足条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25835939/