2016-08-07 19 views
2

Ich habe data.frame-Objekte in der Liste, und ich habe alle möglichen Index des gepaarten Objekts im Raster manipulieren. Jetzt möchte ich eine andere Kombination von Indexgruppen für gegebene Objekte erhalten. Wie erreiche ich das leichter/effizienter? Kennt jemand eine direkte Art, diesen Gruppierungsindex für data.frame-Objekte zu erstellen?Wie erhält man eine mögliche Kombination von Index für einen Datensatz in der Liste?

Spielzeug Daten

foo <- data.frame(start=seq(1, by=4, len=6), stop=seq(3, by=4, len=6)) 
bar <- data.frame(start=seq(5, by=2, len=7), stop=seq(7, by=2, len=7)) 
bleh <- data.frame(start=seq(1, by=5, len=5), stop=seq(3, by=5, len=5)) 

myList <- list(foo, bar, bleh) 

expand.grid verwenden, erhalte ich wie folgt:

nn <- length(myList) 
index <- expand.grid("query"=1:nn, "target"=1:nn) 
index <- index[index[,1] <= index[,2],] 

simuliert gewünschtes Ausgabeformat:

$foo 
    query target 
1  1   1 
4  1   2 
7  1   3 

$bar 
    query target 
4  1   2 
5  2   2 
8  2   3 

$bleh 
    query target 
7  1   3 
8  2   3 
9  3   3 

von der gewünschten Ausgabe, wie kann ich bekomme das? Gibt es irgendwelche R-Pakete, die entsprechende Methoden für diese Art von Manipulation bereitstellen? Kann jemand mögliche Ideen vorschlagen, um diese Aufgabe zu erledigen? Dank

Antwort

3

Wir könnten versuchen

i1 <- seq_along(myList) 
l1 <- lapply(i1, function(i) seq(i)) 
l2 <- lapply(seq_along(i1), function(i) i1[!i1 %in% sequence(i-1)]) 
Map(function(x,y) {x1 <- expand.grid(x,y) 
        x1[c(TRUE, diff(x1[,1])>=0),]}, l1, l2) 
#[[1]] 
# Var1 Var2 
#1 1 1 
#2 1 2 
#3 1 3 

#[[2]] 
# Var1 Var2 
#1 1 2 
#2 2 2 
#4 2 3 

#[[3]] 
# Var1 Var2 
#1 1 3 
#2 2 3 
#3 3 3 
+0

Diese wunderbare Lösung. Danke für Ihre Hilfe. – user88911