2011-03-18 8 views
3

私はシンプルなクエストを持っていると思います。 、パーフェクト* 、パーフェクト* 、良い、良い **グッド***サブセレクションのデータフレーム

私の溶液中での今では、このパーフェクト:

列Quality_scoreがに等しい私のデータフレームでは、私はサブセットをしたいと思います
>Quality_scoreComplete <- subset(completefile,Quality_score == "Perfect" | Quality_score=="Perfect***" | Quality_score=="Perfect****" | Quality_score=="Good" | Quality_score=="Good***" | Quality_score=="Good****") 

この方法を簡略化する方法はありますか?同様に:

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

はあなたのすべてをありがとう、

Lisanne

答えて

1

働くことの一つはgreplあり、これは、文字列内のパターンを検索し、それがあるかどうかを示す論理を返します。あなたは、大文字と小文字の区別を無視するか、を示すためだけでなく、文字列で|演算子を使用し、ignore.caseことができます。

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 

編集:私は今、その場合の感度が問題、感謝の失読症ではなかった参照してください!チェック、

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

ああ、私は問題があると思います。私はRを別のプログラムに実装していますが、このプログラムは再実装されていません。他のオプションはありますか? – Samantha

+0

は、そのIDが 'grepl'呼び出しを正しく評価していないことを認識していませんか?それとも、そのシンボルを入力できないということですか? –

2

あなたもsubsetを必要としない:EDITED ?"["

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

@Sacha Epskampの種類コメントに基づいて:==を式の中であなたは、その後に簡素化することができ間違った結果が出るので、上に修正して%in%に修正してください。ありがとう!問題の

例:

> 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

'=='を '%in% 'に置き換えた場合、これはうまくいくでしょう。 –

+0

@Sacha Epskamp:ありがとう! – daroczig

+0

サッシャに感謝します!それは私のために働く! – Samantha