2014-06-23 5 views
0

R에 8 개의 변수가있는 데이터 프레임 myframe이 있습니다. library(sqldf)을 사용하여 sqldf 패키지를로드합니다. 내가 행의 명확한 인스턴스가 어디 c < 1000을 포함 것을 볼 view(proxyframe)를 사용 proxyframe 볼 때, 그러나R에있는 sqldf select 문이 작동하지 않습니까?

proxyframe = sqldf("select a, b, c, d, e from myframe where c > 1000") 

: 다음 명령을 실행합니다. 좀 더 조사를했고, 어떤 이유로 문이 좋아하는 것을 발견 : 나는 이상한 dataframes를 반환하는 내 선택 문을 일으키는 원인이 될 수 있습니다 무엇에 어떤 일반적인 조언, 아이디어를 찾고 있어요

"0" < 6 # returns true 
"22" > 6 # returns false 

, 그것은 아무것도 경우 R의 이상한 비교 연산자 사용. 내 두려움은 어떤 식 으로든 열 c이 문자이고 올바른 비교 연산자가 적용되지 않는다는 것입니다. R이 어떻게 커버 아래에서 작동하는지 또는이 패키지의 작동 방식에 대해 많은 경험이 없지만.

답변

2

캐스트 실시간으로 문자 열 :

> DF <- data.frame(a = "22", stringsAsFactors = FALSE) 
> sqldf("select * from DF where cast(a as real) > 6") 
    a 
1 22 
+0

가 대단히 감사합니다. 이것은 완벽하게 작동했습니다. 나는 이것이 유형/수업 문제라고 추측한다. 그렇다면 빠른 후속 조치 : 캐스팅 구문을 사용할 필요가 없도록 데이터 프레임의 특정 열을 실제 유형으로 변경하는 빠른 방법이 있습니까? – mt88

+0

@ mt88'myframe $ c <- as.numeric (myframe $ c)'을 시도하십시오. 'c' 컬럼이 하나의 요소라면 ('class (myframe $ c)'를 검사하십시오.), as.numeric (as.character (myframe $ c))'를 사용해야합니다. – Gregor