r - 根据矩阵中列的排列,有多少行满足条件

标签 r matrix

我有一个矩阵,其中每行都是一个样本,每列都是一个物种(样本 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/

相关文章:

r - 在 R 中的 ggplot2 中操作数据点的值

python - 在 Python 中提取列表中 N 维数组的元素

c++ - 二维矩阵中的二进制搜索

numpy 矩阵跟踪行为

r - 如何在R中生成偏态正态分布的随机数?

r - 用循环填充矩阵

r - 我尝试使用 R studio 显示系统发育树时收到错误消息,但无法上传

r - 使用 R 进行数据转换

c# - 如何在 C# 中反转逻辑交错数组的值?

python - 将多维数组中的选定值追加到新数组