web-dev-qa-db-fra.com

Filtrage des données dans une trame de données en fonction de critères

Je suis nouveau chez R et je n'arrive pas à maîtriser ce concept. Supposons que j'ai une table chargée appelée "lieux" avec 3 colonnes disons - ville, population et température moyenne d'été

Disons que je veux "filtrer" - produire un nouvel objet de table où la population est inférieure à 1 million et la température estivale moyenne est supérieure à 70 degrés.

Dans tout autre programme que j'ai utilisé, ce serait assez facile, mais après avoir fait des recherches, je me retrouve dans une plus grande confusion. Étant donné le but de R et ce qu'il fait, cela doit être assez simple.

Comment appliquer les conditions ci-dessus au tableau? Quelles seraient les étapes? D'après ce que je comprends, je ne peux pas simplement sélectionner les en-têtes de tableau en fonction de leur nom, ce qui serait Nice (par exemple, OERE ville <1000000)

7
Doug Fir

Étant donné un cadre de données "dfrm" avec les noms des villes dans la colonne "ville", la population dans la colonne "population" et la température moyenne estivale dans la colonne "meanSummerT", votre demande de sous-ensemble répondant à ces exigences communes serait satisfaite. avec l'un d'eux:

subset( dfrm, population < 1e6 & meanSummerT > 70)
dfrm[ which(dfrm$population < 1e6 & dfrm$meanSummerT > 70) , ]
dfrm[ which(dfrm[['population']] < 1e6 & dfrm[['meanSummerT']] > 70) , ]

Si vous vouliez juste les noms des villes répondant à ces critères communs, alors cela fonctionnerait:

subset( dfrm, population < 1e6 & meanSummerT > 70 , city)
dfrm[ which(dfrm$population < 1e6 & dfrm$meanSummerT > 70) , "city" ]
dfrm[ which(dfrm[['population']] < 1e6 & dfrm[['meanSummerT']] > 70) , "city" ]

Notez que les noms de colonne ne sont pas cités dans le sous-ensemble ou à la suite de l'opérateur "$" mais ils sont cités dans "[["

17
42-

Vous recherchez subset

si vos données s'appellent mydata

newdata <- subset(mydata, city < 1e6)

Ou vous pouvez utiliser [, ce qui est par programmation plus sûr

newdata <- mydata[mydata$city < 1e6]

Pour plusieurs conditions, utilisez & ou | lorsque approprié

Vous pouvez également utiliser le package sqldf pour utiliser sql

library(sqldf)

newdata <-  sqldf('select * from mydata where city > 1e6')

Ou vous pouvez utiliser data.table ce qui facilite la syntaxe pour [ (en plus d'être efficace en mémoire)

library(data.table)

mydatatable <- data.table(mydata)
newdata <- mydatatable[city > 1e6]
13
mnel