创建具有相同单元格值的子矩阵

时间:2014-10-20 22:17:08

标签: r matrix

我有一个包含许多行和列(rxp)的矩阵,我正在尝试创建一个子矩阵,它只包含那些具有相同单元格值的行和列。例如

这是我的矩阵

   a  b  c  d 
a  0  1  1  1  
b  1  0  0  1
c  1  0  0  1
d  0  1  0  0
e  0  1  1  1

此处行bc具有相同的值,因此代码应创建,第一个子矩阵仅包含bc行,第二个子矩阵包含行{{ 1}}和a

e

3 个答案:

答案 0 :(得分:3)

假设可能有多个重复行集,因此如果m是您的矩阵,则会创建一个矩阵列表,其中每个矩阵都有重复的行:

DF <- as.data.frame(m)
Filter(function(x) nrow(x) > 1, split(DF, do.call(paste, DF)))

答案 1 :(得分:2)

您可以在两个方向上使用duplicated

m[duplicated(m) | duplicated(m, fromLast=TRUE),]
#   a b c d
# b 1 0 0 1
# c 1 0 0 1

m

的位置
structure(c(0L, 1L, 1L, 0L, 1L, 0L, 0L, 1L, 1L, 0L, 0L, 0L, 1L, 
1L, 1L, 0L), .Dim = c(4L, 4L), .Dimnames = list(c("a", "b", "c", 
"d"), c("a", "b", "c", "d")))

答案 2 :(得分:1)

您也可以使用。

 indx <- which(duplicated(m)) #m from @Richard Scriven post

返回矩阵列表

 lapply(indx, function(i) m[colSums(t(m)==m[i,])==ncol(m),])
 [[1]]
 #  a b c d
 #b 1 0 0 1
 #c 1 0 0 1

 [[2]]
 #  a b c d
 #a 0 1 1 1
 #e 0 1 1 1