2013-04-09 239 views
4

我有一個尺寸爲401 * 5677的數據集。在這個矩陣的列中有列是相同的但列名不同。 現在,我想只保留一列以上的列,這些列不止一次重複,並且還爲刪除的列獲取索引j。刪除矩陣中的重複列

讓我們作爲一個例子矩陣使用,以下內容:

B=matrix(c(1,4,0,2,56,7,1,4,0,33,2,5), nrow=3) 
colnames(B)<-c("a","b","c","d") 

我做什麼,到目前爲止(在我的實矩陣G)是:

corrG<-cor(G) 
Gtest=G 
for (i in 1:nrow(corrG)){ 
    for (j in 1:ncol(corrG)){ 
    if (i<j && corrG[i,j]==1){ 
     Gtest[,j]=NA 
    } 
    } 
} 
Gfinal<-Gtest[,complete.cases(t(Gtest))] 

我的代碼返回一個矩陣,仍包含(!)一些重複的列。 有什麼幫助嗎?

回答

7

嘗試duplicated函數對矩陣的轉置。

duplicated.columns <- duplicated(t(your.matrix)) 

new.matrix <- your.matrix[, !duplicated.columns] 
+0

@ Nishanth - 這是很好的方法與'數據Frames'工作? – 2017-07-24 15:33:29

3

一行答案

B = matrix(c(1, 4, 0, 2, 56, 7, 1, 4, 0, 33, 2, 5), nrow = 3) 
colnames(B) <- c("a", "b", "c", "d") 

B 
##  a b c d 
## [1,] 1 2 1 33 
## [2,] 4 56 4 2 
## [3,] 0 7 0 5 

B[, !duplicated(t(B))] 
##  a b d 
## [1,] 1 2 33 
## [2,] 4 56 2 
## [3,] 0 7 5 
+0

是的,1行。但OP要求刪除列的索引。所以我有一個額外的代碼行;-) – Nishanth 2013-04-09 14:48:00

+0

是的我需要的指標,因爲我也有一個向量,其長度等於列的數量。所以,每當我從矩陣中刪除一列時,我也需要從這個向量中刪除相應的元素。 :) – 2013-04-09 15:03:41

+0

e4e5f4,感謝您的排序代碼。它工作正常。 – 2013-04-09 15:26:46