r - 比较多行并在 R 或 Excel 中创建矩阵

标签 r excel shell file matrix

我有一个包含多行的文件,如下所示

在文件 1 中:

a  8|2|3|4   4
b  2|3|5|6|7 5
c  8|5|6|7|9 5

a 到 a 有 4 个重叠,同样 a 到 b 有 2 个重叠,所以要检查各个实体之间的重叠,我需要生成一个包含上述细节的矩阵,输出应该是一个类似的矩阵
  a b c
a 4 2 1
b 2 5 3
c 1 3 5

请给我一个建议,如何做到这一点?有没有办法使用 excel 或使用 shell 脚本或使用 R 来做到这一点?我编写了以下代码,但由于我不是一个好的编码器,我无法以正确的格式打印输出。
setwd('C:\\Users\\Desktop\\')
newmet1<-file("file.txt")
newmet2<-strsplit(readLines(newmet1),"\t")
Newmet<-sapply(newmet2, function(x) x[2:length(x)], simplify=F )

for (i in 1:length(Newmet))
{
  for (j in 1:length(Newmet)
  {
  c <- ((intersect(Newmet[[i]], Newmet[[j]]))
  print (length(c))
  } 
}

已编辑:感谢所有答案。在以下答案的帮助下,我使用 excel 和 R 得到了矩阵。

最佳答案

这是 R 中的一个函数,它将每列匹配的计数作为新矩阵返回

首先,我们将您的数据放入 R data.frame 对象中:

A <- c(8,2,3,4,NA)
B <- c(2,3,5,6,7)
C <- c(8,5,6,7,9)
dataset <- data.frame(A,B,C)

然后我们创建一个函数:
count_matches <- function (x) {
  if (is.data.frame(x)) {
    y <- NULL
    for (i in 1:dim(x)[2]) {
      for (j in 1:dim(x)[2]) {
        count <- sum(x[[i]][!is.na(x[i])] %in% x[[j]][!is.na(x[j])])
        y <- c(y, count)
      }
    }
    y <- matrix(y, dim(x)[2], )
    colnames(y) <- names(x)
    rownames(y) <- names(x)
    return(y)
  } else {
    print('Argument must be a data.frame')
  }
}

我们在数据集上测试函数:
count_matches(dat)

它返回一个矩阵:
  A B C
A 4 2 1
B 2 5 3
C 1 3 5

关于r - 比较多行并在 R 或 Excel 中创建矩阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39403540/

相关文章:

r - 将右侧的轴标签与ggplot2对齐

r - Rmarkdown YAML 中的引号和内联 R 代码

java - 使用Java更新Excel文件(插入行)

vba - Excel VBA将时间特定值从用户窗体存储到单元格中

bash - 检测 PATH 中是否有特定的目录条目

r - 有没有办法在 ggplot 的 geom_image 中添加 alpha 值?

r - 配plm包装的砝码

java - 使用 apache poi 将 .xls 转换为 csv 文件

python - 你如何使用 Elixir 解析 150g csv 文件? shell ? SQL数据库?

bash - 为什么 if 和 else 都被执行?