2017-12-08 2 views
0

Ich mag folgenden DatenrahmenR: Bedingte Kombinationen von Datenrahmen

data <- data.frame("var"=c("x", "y", "z", "xy", "xz"), 
        "val"=c("1", "2", "3", "4", "5")) 

Im Gegensatz zu expand.grid Ich habe die Anforderung, dass die Kombinationen in var nicht jeden Buchstaben mehr als einmal einen Datenrahmen aus Kombinationen der var -Spalte erstellen enthalten . So muss die resultierende Datenrahmen werden

dataRes <- data.frame("var"=c("x+y+z", "y+xz", "xy+z"), 
         "val"=c("6",  "7", "7")) 

Hier ein zweites Beispiel ist

data <- data.frame("var"=c("x", "y", "z", "xy", "xz", "yz"), 
        "val"=c("1", "2", "3", "4", "5", "6")) 

wo der gewünschte Ausgang ist

dataRes <- data.frame("var"=c("x+y+z", "y+xz", "xy+z", "x+yz"), 
         "val"=c("6",  "7", "7", "7")) 

Gibt es eine generische Funktion in R für diese, oder ich tun muss einfach alle Kombinationen machen und dann eine String-Suche durchführen, um alle Kombinationen auszusortieren, in denen ein Buchstabe mehr als einmal vorkommt?

+0

Ich verstehe Ihre Frage nicht. Möchten Sie alle Permutationen im Ergebnis enthalten oder nur eine bestimmte Teilmenge von Permutationen? – guscht

Antwort

1

Dies folgt Ihren Vorschlag, alle Kombinationen zu machen und dann die, die Ausmerzung wo eine der Variablen mehr als einmal existiert:

x <- 3;y <- 2;z <- 4;vars <- c("x", "y", "z");oper <- c("+", "*") 
combinations <- expand.grid(vars, oper, vars, oper, vars) 
combinations <- combinations[apply(combinations[c(1,3,5)], 1, FUN = anyDuplicated)==0, ] 
pairs <- do.call(paste, c(combinations, sep="")) 
result <- data.frame(expr = pairs, result = sapply(pairs, function(k) eval(parse(text = k))), row.names = 1:length(pairs)) 
result 

Ich bin relativ sicher, dass es für diese kein dedizierter Befehl ist.