2017-04-22 4 views
2

Diese Daten meine ProbeElemente der Matrix in R Kombinieren

ist
> 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 

I haben Elemente von der Matrix verbinden Paare von Spaltennamen von ihnen zu erhalten, wo einer von Element 4 und eine andere ist 2 in der gleichen Reihe.

In Folge sollte es so

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 

schauen möchte ich nur Paare, wo ein Element 4 und andere 2 in der gleichen Zeile. W_1_N und W_1_D haben nur NA so wurde weggelassen. W_1_E erscheint in 3 Zeilen, da in den Beispieldaten 3 Paare (4,2) in der Zeile vorhanden sind. W_1_C hat 4 Paare. Ich habe versucht mit Schleifen, aber ich weiß nicht, was in data.frame sein sollte.

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

    ) 
    } 

    } 
} 

Vielen Dank für Ihre Hilfe.

Antwort

3

Hier ist eine Idee:

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]]))) 

Welche gibt:

#  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 

Daten

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

Vielen Dank, es funktioniert perfekt :) –