2011-03-18 6 views
3

나는 단순한 퀘스트를 가지고 있다고 생각합니다. , 완벽한 * , 완벽한 * , 잘함, 잘함 **과 좋은 ***하위 선택 데이터 프레임

내 솔루션에 지금의이 완벽한 :

열 Quality_score가 동일 어디 내 dataframe에서 나는 부분 집합을하고 싶습니다
>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이 문자열의 패턴 검색, grepl입니다 작동하고있는 경우를 나타내는 논리를 반환

답변

1

한 가지. 당신은 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)) 
+0

아, 내가 문제가 있다고 생각합니다. 다른 프로그램에서 R을 구현하지만이 프로그램은 다시 실행되지 않습니다. 다른 옵션들? – Samantha

+0

이 ID가'grepl' 호출을 올바르게 평가하지 못한다고 인식합니까? 아니면 그 상징을 입력 할 수 없다는 뜻입니까? –

2

심지어 subset 필요하지 않습니다 : 수정 됨 ?"["

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

@ Saach Epskamp : 감사합니다! – daroczig

+0

사샤에게 감사드립니다! 그것은 나를 위해 일합니다! – Samantha