2016-09-11 6 views
-1

Ich habe ein Datenrahmen wie folgt aus:Erstellen von Booleschen Ausdrücken aus den Spalten

set1,set2,set3 
"test1","test12","test13" 
"test2","test22","test23" 

I Booleschen Ausdrücken auf Basis erstellen möchten und accross alle möglichen Kombinationen aller Spalten, die erste Spalte als Base.

Ausgabebeispiel basierend auf dem oben df:

("test1" AND "test12" AND "test13") 
("test1" AND "test22" AND "test23") 
("test2" AND "test12" AND "test13") 
("test2" AND "test22" AND "test23") 

Gibt es eine einfache Möglichkeit, es zu machen? Ich habe versucht, diese:

set1 <- read.csv("C:/Users/Desktop/set.csv", header=TRUE, sep=",") 

df <- data.frame() 

i <- 1 

for (i in 1:nrow(set1$set1)) { 
j <- 1 
for (j in 1:nrow(set1$set2)) { 
k <- 1 
for (k in 1:nrow(set1$set3)) { 
df <- paste(set1$set1[i]," AND ",set1$set2[j]," AND ", set1$set3[k]) 
} 
} 
} 
+0

Gibt es etwas, das ich in Frage aktualisieren sollte? –

+0

Wie wäre es '(" test1 "UND" test22 "UND" test13 ")'? – Sotos

Antwort

0

Eine Idee, zuerst wir eine neue Spalte einzufügen set2 und set3 so zu vermeiden Strings wie ("test1" AND "test22" AND "test13") erstellen. Wir erstellen dann die Kombinationen über expand.grid und paste, dh

df1$new <- do.call(paste, c(df1[,(2:3)], sep = ' AND ')) 
do.call(paste, c(expand.grid(df1[,-(2:3)]), sep = ' AND ')) 
#[1] "test1 AND test12 AND test13" "test2 AND test12 AND test13" "test1 AND test22 AND test23" "test2 AND test22 AND test23" 

Wenn Sie alle Kombinationen wollen, dann

do.call(paste, c(expand.grid(df1), sep = ' AND ')) 
#[1] "test1 AND test12 AND test13" "test2 AND test12 AND test13" "test1 AND test22 AND test13" "test2 AND test22 AND test13" 
#[5] "test1 AND test12 AND test23" "test2 AND test12 AND test23" "test1 AND test22 AND test23" "test2 AND test22 AND test23" 

DATA

dput(df1) 
structure(list(set1 = c("test1", "test2"), set2 = c("test12", 
"test22"), set3 = c("test13", "test23")), .Names = c("set1", 
"set2", "set3"), class = "data.frame", row.names = c(NA, -2L)) 

EDIT Da Sie wollen Halten Sie die Anführungszeichen um jedefest, dann

#as before, 
v1 <- do.call(paste, c(expand.grid(df1), sep = ' AND ')) 
v2 <- paste0('(', sapply(lapply(strsplit(v1, ' AND '), function(i) dQuote(i)), 
             function(j) paste(j, collapse = ' AND ')), ')') 

#1 (“test1” AND “test12” AND “test13”) 
#2 (“test2” AND “test12” AND “test13”) 
#3 (“test1” AND “test22” AND “test13”) 
#4 (“test2” AND “test22” AND “test13”) 
#5 (“test1” AND “test12” AND “test23”) 
#6 (“test2” AND “test12” AND “test23”) 
#7 (“test1” AND “test22” AND “test23”) 
#8 (“test2” AND “test22” AND “test23”) 
+0

Danke. Ich habe den Befehl mit allen Kombinationen ausprobiert. Nur eine Frage Ich denke, das Ergebnis '" test1 AND test12 AND test13 "' unterscheidet sich von meinem Beispiel Ausgang '(" test1 "UND" test22 "AND" test13 ")' –

+0

Oh, Sie wollen es auch in Klammern und mit den Anführungszeichen eingeschlossen um jeden "Test"? – Sotos

+0

Ja, weil sie verschiedene Ausdrücke sind –

Verwandte Themen