【问题标题】:Finding row indices of the same patterns in an association matrix在关联矩阵中查找相同模式的行索引
【发布时间】:2015-02-20 15:46:06
【问题描述】:

我有一个关联矩阵(0-1 矩阵),行在其中重复。

我需要找出哪些行具有相同的模式。

例如

如果我的矩阵如下

   [,1] [,2] [,3]
[1,]    1    0    1
[2,]    1    0    1
[3,]    1    1    1
[4,]    1    1    1
[5,]    1    1    0

那么输出应该是

行号1、2 和 3、4 和 5 分别表现出相同的模式。

我可以使用检查数据框来做到这一点。条件。但我确信有一个优雅的解决方案。

编辑

预期结果:

假设输出是一个列表'a'然后是上面的结果,例如应该是这样的:

> a
[[1]]
 [1] 1 2
[[2]]
[1] 3 4
[[3]]
 [1] 5 

【问题讨论】:

  • 预期的结果是什么。?根据输入数据集,第 1、2 行构成一组,3,4 行构成另一个组,5 行构成第三组。需要拆分数据集吗?
  • @akrun,我已经用所需的输出编辑了我的问题。
  • 试试split(1:nrow(m), apply(m, 1, paste, collapse=""))
  • 如果您的矩阵是二进制的,您也可以从this QA 那里获取想法; split(seq_len(nrow(m)), c(m %*% (2 ^ (0:(ncol(m) - 1)))))

标签: r matrix


【解决方案1】:

你可以试试

 indx <- do.call(paste, as.data.frame(m))
 setNames(split(seq_along(indx),factor(indx, unique(indx))), NULL)
 #[[1]]
 #[1] 1 2

 #[[2]]
 #[1] 3 4

 #[[3]]
 #[1] 5

数据

 m <- structure(c(1L, 1L, 1L, 1L, 1L, 0L, 0L, 1L, 1L, 1L, 1L, 1L, 1L, 
 1L, 0L), .Dim = c(5L, 3L))

【讨论】:

    猜你喜欢
    • 2015-07-28
    • 2023-03-24
    • 2013-04-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多