2016-05-26 5 views
0

Ich habe das Gefühl, dass ich in der Nähe bin, aber ich kann es nicht zur Arbeit bringen und Ihre Hilfe würde sehr geschätzt werden.Auswählen von Zeilen basierend auf einem Wert einer Faktorvariablen in einem dat.frame in einer Liste

Mein Ziel ist es, Daten in einer Liste basierend auf dem Wert von 1 der Faktoren zu unterteilen. Es handelt sich um Daten zu Probanden, die zu unterschiedlichen Zeitpunkten Stimuli ausgesetzt waren. Jetzt möchte ich die Daten aller Variablen für alle Subjekte pro Stimulus unterteilen. Die Variable des Stimulus wird 'Stimulus' genannt. Und der Reiz hat zum Beispiel den Namen "Happy 8". So Beispielpfad: SubjList $ Subject1 $ Stimulus [ "Happy 8"] (obwohl dies funktioniert auch nicht

Mein Datenrahmen hat die folgende Struktur:.

Subjdf Große Liste (38 Elemente)

Jedes Element ist ein data.frame mit rund 4000 Beobachtungen (schwankend) und 26 Variablen (einschließlich „Stimulus“)

Jetzt kann ich, indem Sie die folgenden eine Spalte über alle Fächer (Elemente) Teilmenge:

ColSub <- (lapply(SubjList,'[[','Stimulus')) 

Aber wenn ich versuche, eine Bedingung zu implementieren, funktioniert es nicht.

Happy8 <- (lapply(SubjList,'[[','Stimulus'=='Happy 8')) 

nicht einfache Auswahlmethoden wie:

Happy8 <- SubjList$Subject1$Stimulus["Happy 8", ] 

Also, ich es eine Möglichkeit, nur die Zeilen der Teilmenge, die die Bedingung op "Stimulus" == "Happy 8" folgen. und erstellen Sie eine Liste von gleichen Themen mit gleichen Variablen, aber nur die Beobachtungen von Stimulus Happy 8.

Vielen Dank im Voraus!

+0

Beispiel könnte helfen: http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example/5963379 – Bulat

+0

Ich habe versucht, das Problem zu reproduzieren, aber mit den Beispielen Ihrer Antwort funktioniert. Ich weiß nicht, warum, aber die Hauptunterschiede sind: 1) die Daten, die ich durch die folgende Formel geladen verwenden wird: Subjdf <- setNames (lapply (paste0 (nm, ".txt"), read.delim), nm) 2) Die Struktur der Liste hat einen zusätzlichen Namen in meinen Daten: meine Daten: $ P1a: 'data.frame': \t 3720 obs. von 26 Variablen: erstellte Liste: $: 'data.frame': \t 20 obs. von 3 Variablen: Es gibt keinen Namen, wenn ich eine Liste manuell erstellen, während die Art, wie ich es geladen habe, ist. Wahrscheinlich aufgrund der setNames-Funktion. –

Antwort

0

Hier ist, was Sie tun können. Die Namen der Datenrahmen und Spalten sind unterschiedlich:

DF1 <- data.frame(year = c(seq(2000,2012,by=1)), 
        C = runif(13,0,1)) 
DF2 <- data.frame(year = c(seq(2000,2012,by=1)), 
        C = runif(13,0,1)) 

DL <- list(DF1, DF2) 

ColSub <- (lapply(DL, function(DF) {DF[DF$year >= 2005, "C"]})) 
ColSub 

Dies sollte Ihnen die Idee geben, wie Sie Ihren Code ändern.

+0

Vielen Dank für Ihre Antwort! Ich glaube nicht, dass es in meinem Datensatz funktioniert. ColSubS <- (lapply (Subjdf, Funktion (nm) {nm [nm $ Stimulus == "Happy 8", "Video Time"]})) Wo nm ist Vektor mit den Daten.frame-Namen ("P1a", "P1b", "P2a", "P2b", "P3a" usw.).Allerdings, wenn ich es betreibe ich das Video nicht Zeit-Scores erhalten entsprechend den Zeilen, in denen Stimulus $ == "Happy 8", sondern leere Werte wie folgt aus: $ P1a NULL $ P1b NULL $ P2a NULL $ P2b NULL. Ich habe das Gefühl, es ist, weil ich einen Vektor mit den data.frame-Namen verwende, wo Sie DF verwenden, aber mein Äquivalent (P) funktioniert auch nicht –

Verwandte Themen