2010-05-18 5 views
36

J'utilise R et j'ai besoin de sélectionner des lignes avec âge (âge de décès) inférieur ou égal à laclen (longueur de lactation). J'essaye de créer une nouvelle trame de données pour inclure seulement des rangées/ids où la valeur de column'aged 'est inférieure à sa valeur' ​​laclength 'correspondante.sélectionner uniquement les lignes si sa valeur dans une colonne particulière est inférieure à sa valeur dans l'autre colonne

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 

la nouvelle trame de données devrait ressembler à ceci:

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

Toute aide serait appréciée!

Bazon

+0

S'il vous plaît donner plus de détails sur vos besoins. – Karthik

+0

ne vous pas du tout –

+1

Salut Karthik, Je suis en train de créer une nouvelle trame de données pour inclure uniquement les lignes/IDs, la valeur de column'aged 'est inférieure à la valeur de la colonne' laclength ' – Bazon

Répondre

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

devrait faire l'affaire. Les crochets vous permettent d'indexer en fonction d'une expression logique.

+0

merci, aL3xa! Je vais garder celui-ci aussi. Je peux voir que c'est très similaire à un wkmor1 envoyé plus tôt. – Bazon

+1

@ aL3xa "attach" sans "detach" pourrait être dangereux ... Et je pense que la virgule est mal placée. – Marek

+1

@Marek, merci pour vos suggestions! J'ai ajouté 'detach' et placé une virgule après le crochet de droite, donc ça va comme ceci:' attach (df); newdf <- df [qui (âgé <= laclen),]; detach (df) ' – aL3xa

38

Vous pouvez également faire

subset(df, aged <= laclen) 
+1

gentil, rend le code plus propre selon moi, pitié 'R CMD check' ne reconnaît pas les champs utilisés dans le test en tant que variables légitimes. il émet un 'NOTE'" pas de liaison visible pour la variable globale ". – mariotomo

+2

'subset()' a de sérieux problèmes, voir par ex. http://stackoverflow.com/questions/9860090/in-r-why-is-better-than-subset – MERose

3

Si vous utilisez package dplyr que vous pouvez faire:

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