2017-04-22 97 views
2

這是我的樣本數據聯合矩陣的元素中的R

> matrix 
       a  b  c  d 
W_1_N  NA NA NA NA 
W_1_E   2  2  2  4 
W_1_C   4  2  2  4 
W_1_D  NA NA NA NA 

我必須結合從矩陣元素以獲得對它們的列名,其中元件中的一個是4的,另一個是2相同的行。

在結果就應該是這樣的

W_1_E d a 
W_1_E d b 
W_1_E d c 
W_1_C a b 
W_1_C a c 
W_1_C d b 
W_1_C d c 

我只想對其中一個元素是4,另一種是在同一行中2。 W_1_NW_1_D只有NA因此被忽略。 W_1_E出現在3行中,因爲樣本數據中有3對(4,2)行。 W_1_C有4對。我嘗試了循環,但我不知道data.frame應該是什麼。

for (i in row(matrix)){ 
    for (j in col(matrixz)){ 
    if (matrix[i,j]==4){ 
     ram=data.frame(

    ) 
    } 

    } 
} 

非常感謝您的幫助。

回答

3

這裏有一個想法:

library(tidyverse) 

lst <- data.frame(m) %>% 
    rownames_to_column("rn") %>% 
    drop_na() %>% 
    gather(key, value, -rn) %>% 
    group_by(rn, value) %>% 
    summarise(l = list(unique(key))) %>% 
    split(.$rn) 

do.call("rbind", lapply(lst, function(x) expand.grid(x$l[[1]], x$l[[2]]))) 

其中給出:

#  Var1 Var2 
#W_1_C.1 b a 
#W_1_C.2 c a 
#W_1_C.3 b d 
#W_1_C.4 c d 
#W_1_E.1 a d 
#W_1_E.2 b d 
#W_1_E.3 c d 

數據

m <- structure(c(NA, 2L, 4L, NA, NA, 2L, 2L, NA, NA, 2L, 2L, NA, NA, 
4L, 4L, NA), .Dim = c(4L, 4L), .Dimnames = list(c("W_1_N", "W_1_E", 
"W_1_C", "W_1_D"), c("a", "b", "c", "d"))) 
+1

非常感謝你,它完美:) –