2016-07-08 26 views
0

Ich habe eine Liste von Werten, die ich mit der Seq Funktioninnerhalb sqldf Looping basierend auf einem Vektor

x <- (seq(0,10080,by=50)) 

ich diese Werte hinzufügen möchte in meinem Datenrahmen genannt sequence in einer neuen Spalte erstellt habe, in dem der Wert von mycol ist zwischen dem I und dem i + 1-Element in x

ersten Iteration

test<-sqldf('select *, case when (mycol> first value of x and mycol <= second value of x) then **second value** end as sequence from mydataframe') 

zweite Iteration

test<-sqldf('select *, case when (mycol> second value of x and mycol <= third value of x) then **third value** end as sequence from test') 

etc ... bis ich in x

verstehe ich nicht auf alle Zahlen übergeben, wie eine solche Schleife erstellen

Antwort

0

Sie können etwas tun:

for (i in seq(x)-1){ 
    qry <- paste0("select *, case when (mycol>", x[i], " and mycol <= ", 
x[i+1], ") then ", x[i+1], " end as sequence from mydataframe") 
    test <- sqldf(qry) 
} 

Oder definiert mit f Funktion und sapply:

Passen Sie einfach die richtige SQL-Abfrage an.

0

Betrachten Sie den Vorteil von SQL und verwenden Sie eine korrelierte Aggregatunterabfrage anstelle einer Schleife. Bei diesem Ansatz verwenden Sie zwei Datenrahmen, Ihr Original und die Sequenz.

Wenn ich Ihre Bedürfnisse verstehe, müssen Sie im Wesentlichen den höchsten Wert von X finden, dass die aktuelle Zeile mycol unter fällt, so verwenden Sie eine MIN() korrelierte Aggregat-Abfrage.

seqdf <- data.frame(x=(seq(0,10080,by=50))) 

test <- sqldf('SELECT d.*, d.MyCol, 
        (SELECT Min(s.x) FROM seqdf s 
        WHERE s.x >= d.MyCol) As d.Sequence 
       FROM mydataframe d') 

Caveat: Ich bin nicht allzu vertraut mit dem sqldf Paket, so weiß nicht, ob es eine solche Unterabfrage unterstützt (obwohl ich es spiegelt SQLite Dialekt glauben). Aber ich kenne SQL und das ist konforme Syntax.