2016-03-26 6 views
0

enthalten, Subset Ich habe ein Datenframe, das eine Liste von Werten in jeder Reihe von Datenrahmen enthält. Ich möchte einige Bedingungen überprüfen und basierend auf dieser Bedingung möchte ich einen Datenrahmen unterteilen. Zum Beispiel ist in meinem Code myDF mein Dataframe. Das istWie man einen Datenrahmen basierend auf einigen Bedingungen über den Zeilen von Datenrahmen, die eine Liste in

ID Value 
A c(1000, 2000, 3000) 
B c(2000, 500, 1000) 


ID <- c("A", "B") 
Value <- list(c(1000, 2000, 3000), c(2000, 500, 1000)) 
myDF <- data.frame(ID=ID, Value=cbind(Value)) 
vec <- c(2000,3000) 
##Condition 
cnd <- which(myDF$Value[[1]] %in% vec) 

Die obige Bedingung cnd ​​wird die gewünschte Liste geben, aber während dieser Bedingung in Teilmenge Funktion setzen wird es nicht den richtigen Index bekommen.

ld <- lapply(seq(myDF$Value) , function(x) myDF[ which(myDF$Value[[x]] %in% vec),]) 

Dies wird wie folgt ausgegeben. Denn im Ergebnis ist der Index, den myDF bekommt, nicht korrekt.

[[1]] 
    ID   Value 
2  B 2000, 500, 1000 
NA <NA>   NULL 

[[2]] 
    ID   Value 
2  B 2000, 500, 1000 
NA <NA>   NULL 

Meine gewünschte Ausgabe ist unter. Bitte helfen Sie.

 ID Value 
A c(2000, 3000) 
B  2000 

Antwort

0

ist das was du willst?

myDF$Value_filtered <- lapply(seq(myDF$Value), function(i) myDF$Value[[i]][which(myDF$Value[[i]] %in% vec)]) 

Ich habe gerade für 1 für i (auch in Funktionsargument) geändert sonst Ihr lapply nicht Schleife über Listen in Ihrer Spalte $Value.

+0

Sorry, das war ein Tippfehler. Es funktioniert gut, das ist was ich will. –

+0

Gibt es einen anderen Weg als diesen. Ich kann das nicht erreichen, indem ich die Teilmengenfunktion in r verwende. –

Verwandte Themen