2017-04-02 6 views
0

10のマトリックスがあります。たとえば:マトリックスの特定の値の位置のリスト

M1 = matrix(c(1, 0, 1, 0, 1, 0), nrow=2, ncol=3, byrow = TRUE) 
row.names(M1) <- c(100, 101) 
colnames(M1) <- c("A", "B", "C") 
M1 

    A B C 
100 1 0 1 
101 0 1 0 

今私は、次の構文で行列内のすべてのvalues=1のリストを作成する:この例では

"row name"."column name", value 

は私が探している解決策は次のようになります。

100.A, 1 
100.C, 1 
101.B, 1 

答えて

1

はこれを試してみてください:

x <- which(M1==1, arr.ind = TRUE) 
data.frame(COL=paste0(rownames(M1)[x[,1]], ".", colnames(M1)[x[,2]], ", ", 1)) 

#  COL 
#1 100.A, 1 
#2 101.B, 1 
#3 100.C, 1 
2

これを試してみてください:

paste0(row.names(M1==1), ".", colnames(M1==1)) 

それとも、1を追加したい場合:

data.frame(result = paste0(row.names(M1==1), ".", colnames(M1==1), ", 1")) 

EDIT:正しい1以上1時間

result <- list() 
for (i in 1:nrow(M1)){ 
    result[[i]] <- data.frame(result = paste0(rep(row.names(M1)[i], length(colnames(M1)[M1[i,]==1])), ".", colnames(M1)[M1[i,]==1], ", 1")) 
} 
result <- do.call(rbind, result) 
result <- unique(result) 
+0

は、入力プログラムをありがとう!しかし、マトリックスが別の構造を持っていれば、それはうまくいかないと思います。たとえば、1つの列に複数の値が1の場合 –

関連する問題