6

ディメンション 401*5677 のデータ セットがあります。この行列の列の中には、同一であるが列名が異なる列があります。ここで、複数回繰り返される列から 1 つの列のみを保持し、削除された列のインデックス 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))] 

私のコードは、いくつかの重複した列をまだ (!) 含むマトリックスを返します。何か助けはありますか?

4

2 に答える 2

11

duplicated行列の転置で関数を試してください。

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

new.matrix <- your.matrix[, !duplicated.columns]
于 2013-04-09T14:33:26.767 に答える
3

1行の答え

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
于 2013-04-09T14:45:36.310 に答える