3

簡単な質問があると思います。私のデータフレームでは、列 Quality_score が等しいサブセットを作成したいと思います: Perfect、Perfect* 、Perfect*、良い、良い**、そして良い***

これまでの私のソリューションでは:

>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)

皆さん、ありがとうございました、

リザンヌ

4

2 に答える 2

2

あなたも必要ありませんsubset、チェックしてください:?"["

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

EDITED: @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
于 2011-03-18T08:58:15.573 に答える
1

機能することの 1 つはgrepl、これは文字列内のパターンを検索し、そこにパターンがあるかどうかを示す論理値を返すことです。演算子を文字列で使用して|OR を示し、大文字と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))
于 2011-03-18T08:57:22.617 に答える