我有一个包含许多行和列(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
此处行b
,c
具有相同的值,因此代码应创建,第一个子矩阵仅包含b
和c
行,第二个子矩阵包含行{{ 1}}和a
e
答案 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