2014-10-20 62 views
0

我有一個包含許多行和列的矩陣(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行和第2子矩陣行ae

,第一子矩陣
a b c d 
b 1 0 0 1 
c 1 0 0 1 

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

回答

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 
+0

謝謝Akrun,它也可以。 – 2014-10-21 14:03:54

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"))) 
+1

我認爲'米[複製(米,fromLast = TRUE)的列表|重複(m,fromLast = FALSE),]'不需要'sapply'就可以工作。 – eipi10 2014-10-20 22:33:48

+0

你是對的!我正在使用'&&混合起來。乾杯! – 2014-10-20 22:34:48

+0

我的不好,我做了錯誤的....作品完美...感謝理查 – 2014-10-20 22:56:07

3

大概可以有一組以上的重複行的,所以如果m是你的矩陣這產生矩陣的列表,其中每個這樣的矩陣具有重複的行:

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

是的,這是更合適的 – 2014-10-20 22:46:13

+0

@Grothendieck,我喜歡將我的數據集保存爲矩陣格式 – 2014-10-20 22:53:26

相關問題