2010-05-18 6 views
36

Ich verwende R und muss Zeilen mit Alter (Alter des Todes) kleiner oder gleich laclen (Laktationslänge) auswählen. Ich versuche, einen neuen Datenrahmen zu erstellen, um nur Zeilen/ids einzuschließen, wobei der Wert der Spalte'aged 'kleiner ist als der entsprechende Wert' laclength '.nur Zeilen auswählen, wenn der Wert in einer bestimmten Spalte kleiner ist als der Wert in der anderen Spalte

df: 
id1 id2 laclen aged 
9830 64526 26  6 
7609 64547 28  0 
9925 64551  3  0 
9922 64551  3  5 
9916 64551  3  8 
9917 64551  3  8 
9914 64551  3  2 

der neue Datenrahmen soll wie folgt aussehen:

dfnew: 
id1 id2 laclen aged 
9830 64526 26  6 
7609 64547 28  0 
9925 64551  3  0 
9914 64551  3  2 

Jede mögliche Hilfe würde geschätzt!

Bazon

+0

Bitte mehr Details über Ihren Bedarf geben. – Karthik

+0

nicht bekommen Sie überhaupt –

+1

Hallo Karthik, Ich versuche, einen neuen Datenrahmen zu erstellen, nur Zeilen/IDs, wobei der Wert der Spalte'aged 'ist kleiner als der Wert der Spalte' laclength ' – Bazon

Antwort

63
df[df$aged <= df$laclen, ] 

sollte es tun. Mit den eckigen Klammern können Sie basierend auf einem logischen Ausdruck indizieren.

+0

danke, aL3xa! Ich werde das auch behalten. Ich kann sehen, dass es sehr ähnlich zu einem wkmor1 früher gesendet wurde. – Bazon

+1

@ aL3xa 'attach' ohne' detach' könnte gefährlich sein ... Und ich denke, dass Komma verlegt ist. – Marek

+1

@Marek, danke für Anregungen! Ich habe "detach" hinzugefügt und Komma nach der rechten Klammer platziert, also geht es so: 'attach (df); newdf <- df [welches (gealtert <= laclen),]; delete (df) ' – aL3xa

38

können Sie tun auch

subset(df, aged <= laclen) 
+1

nice one, macht code ordner nach mir, schade 'R CMD check' erkennt nicht die Felder im Test verwendet als legitime Variablen. es gibt eine "NOTE" keine sichtbare Bindung für die globale Variable aus. – mariotomo

+2

"Teilmenge()" hat einige ernsthafte Probleme, siehe z.B. http://stackoverflow.com/questions/9860090/in-r-why-is-better-than-subset – MERose

3

Wenn Sie dplyr Paket verwenden Sie tun können:

library(dplyr) 
filter(df, aged <= laclen)