2011-03-18 1 views
3

J'ai un questionnaire simple je pense. Dans mon dataframe je voudrais faire partie où la colonne Quality_score est égale à: Parfait, parfait * , parfait * , bon, Bon ** et *** Bonsous-ensemble dataframe

Cela ma solution maintenant:

>Quality_scoreComplete <- subset(completefile,Quality_score == "Perfect" | Quality_score=="Perfect***" | Quality_score=="Perfect****" | Quality_score=="Good" | Quality_score=="Good***" | Quality_score=="Good****") 

Existe-t-il un moyen de simplifier cette méthode? Comme:

methods<-c('Perfect', 'Perfect***', 'Perfect****', 'Good', 'Good***','Good***') 
Quality_scoreComplete <- subset(completefile,Quality_score==methods) 

Merci à tous,

Lisanne

Répondre

1

Une chose qui fonctionne est grepl, cette recherche un motif dans les chaînes et renvoie une logique indiquant si elle est là. Vous pouvez utiliser l'opérateur | dans une chaîne aussi bien indiquer OU, et ignore.case ignorer la casse:

methods<-c('Perfect', 'Perfect*', 'Perfect*', 'Good', 'Good','Good*') 

completefile <- data.frame(Quality_score = c(methods, "bad", "terrible", "abbysmal"), foo = 1) 

subset(completefile,grepl("good|perfect",Quality_score,ignore.case=TRUE)) 
1  Perfect 1 
2  Perfect* 1 
3  Perfect* 1 
4   Good 1 
5   Good 1 
6   Good* 1 

EDIT: Je vois maintenant que la sensibilité des cas était pas un problème, merci dyslexiques! Vous pouvez simplifier ensuite:

subset(completefile,grepl("Good|Perfect",Quality_score)) 
+0

Oh, je pense qu'il ya un problème. J'implémente R dans un autre programme mais ce programme ne se reconnecte pas | d'autres options? – Samantha

+0

ne reconnaît pas que l'ID n'évalue pas correctement l'appel 'grepl'? Ou voulez-vous dire que vous ne pouvez pas entrer dans ce symbole? –

2

Vous ne même pas besoin subset, vérifiez: ?"["

Quality_scoreComplete <- completefile[completefile$Quality_score %in% methods,] 

ÉDITÉ: basée sur le commentaire genre de @Sacha Epskamp: == dans l'expression donne de mauvais résultats, donc corrigé ci-dessus à %in%. Merci!

Exemple du problème:

> x <- c(17, 19) 
> cars[cars$speed==x,] 
    speed dist 
29 17 32 
31 17 50 
36 19 36 
38 19 68 
> cars[cars$speed %in% x,] 
    speed dist 
29 17 32 
30 17 40 
31 17 50 
36 19 36 
37 19 46 
38 19 68 
+0

Cela fonctionnerait si vous remplacez '==' par% en% ' –

+0

@Sacha Epskamp: droite, merci! – daroczig

+0

Merci à Sascha! Ça marche pour moi! – Samantha