2017-10-05 1 views
0

특정 범위의 값을 포함해야하는 변수를 선택하는 데 문제가 있습니다. 내 변수를 3 가지 범주로 나누고 싶습니다. 즉; small, mediumbig. 문맥. 나는 obj_hid_woonopp이라는 이름의 변수를 가지고 있는데 (크기는 m2) 16-375가된다. 그리고 내 데이터 세트는 datalogitvar입니다.변수의 하위 선택

재현 가능한 코드가 없습니다. 죄송합니다. 그러나 그것이 단순한 질문이라고 생각하기 때문에 그럼에도 불구하고 대답 할 수 있기를 바랍니다. 내가 사용하고있는 코드는 다음과 같습니다.

datalogitvar$size_small<- as.numeric(obj_hid_WOONOPP>="15" & obj_hid_WOONOPP<="75") 
datalogitvar$size_medium<- as.numeric(obj_hid_WOONOPP>="76" & obj_hid_WOONOPP<="100") 
datalogitvar$size_large<- as.numeric(obj_hid_WOONOPP>="101") 

이 코드를 실행하면 결과가 나옵니다. 단지 내가 바라는 결과가 아닙니다. 예를 들어 작은 카테고리에는 매우 높은 숫자도 포함됩니다. 그것은 ("75"을 정의하기 때문에) "75"을 포함하고 있기 때문에 "175"의 값을 취하는 것으로 보입니다. 나는 그것에 대해 생각해 봤고 그것이 내 데이터를 숫자가 아닌 텍스트로 읽는다고 느낀다. 그러나 나는 조금 혼란스러워서 as.numeric라고 말합니다. 누군가가 내게 3 가지 변수를 적절한 범위로 만들도록 어떻게 설명 할 수 있습니까? 나는 가깝다고 느낀다. 그러나 결과는 지금까지 쓸모가 없다.

도움을 주셔서 대단히 감사합니다.

+1

숫자가 처음부터 문자열로 가져온 이유는 무엇입니까? 그 문제를 먼저 해결해야합니다.상황을보기 위해 [재현 가능한 예]없이 (https://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example) 도움을받는 것이 어렵습니다. 그러나 문자 값이 아닌 부울 비교시에만 as.numeric()을 실행합니다. – MrFlick

+0

@MrFlick에 동의하면 숫자가 문자와 숫자로 일관성없이 참조되는 문제가 발생합니다. 당신의 문제는 캐릭터로 저장된다는 점에 특화된 것이므로, 모든 것을'obj_hid_WOONOPP'에서'as.numeric'으로 변경하면 당신은 잘되어야합니다. – Mako212

+0

방금 ​​length> (obj_hid_WOONOPP)를 사용했습니다. [1] 90127 그래서 괜찮은 것 같습니다. 그것은 문제를 일으키지 않는 것 같습니다. – Thundersheep

답변

0

이와 같은 질문에 대해 mtcars와 같은 공개적으로 사용 가능한 데이터 세트로 문제를 재현 할 수 있습니다.

1) 코드 오른쪽에 DATASET $ obj_hid_WOONOPP에 대한 데이터 집합의 이름을 지정해야합니다. 2) 숫자 값에 따옴표를 사용하는 이유는 무엇입니까? 이 따옴표는 숫자가 숫자로 취급되지 않도록합니다. 대신 문자열 값으로 처리됩니다.

아래에서 작성한 코드를 사용하고 싶습니다.

mtcars$mpg_small <- as.numeric(mtcars$mpg >= 15 & mtcars$mpg <= 20) 
mtcars$mpg_medium <- as.numeric(mtcars$mpg > 20 & mtcars$mpg <= 25) 
mtcars$mpg_large <- as.numeric(mtcars$mpg > 25) 
+0

고마워, 그건 내 잘못이야! 나는 내 전화 번호를 인용했다. 너무 바보. 나는 텍스트를 인용 한 이전 작품의 줄을 복사했다. 팁을 주셔서 대단히 감사합니다. 또한 데이터 집합 $ 변수를 사용할 필요가 없기 때문에 데이터를 첨부했지만 그 팁에도 감사드립니다. 그것은 어쨌든 당신이 제안한 방식으로 쓰는 것이 낫습니다. – Thundersheep

0

그냥 문제를 설명하기 : 당신이 그 (것)가 예상대로

a <- "75" 
b <- "175" 

a > b 

TRUE (75 > 175) 

a < b 
FALSE (75 < 175) 

문자열 비교하지 않습니다.

+0

고마워. 방금 알아 냈어. 님이 삭제되었습니다. 고맙습니다! – Thundersheep

0

코드의 예가 도움이되지만 두 가지 아이디어가 떠오릅니다.

먼저 숫자 벡터를 설정 한 컷 포인트를 기준으로 요인으로 변환하는 데 사용할 수있는 cut() 설명서를 살펴보십시오. @MrFlick가 지적으로 as.numeric() 당신이 THEN 숫자 값을 변환 등 > 또는 & 부울 비교를 수행 할 문자열을 포함하는 문자 벡터에서 실행되도록

둘째, 당신의 코드를 다시 작성할 수 있습니다. 문자열 obj_hid_WOONOPP 당신의 벡터 수치를 강요 할 수없는 값을 포함하는 경우

mtcars$mpg_small <- (as.numeric(mtcars$mpg) >= 15 & 
        (as.numeric(mtcars$mpg) <= 20)) 

이 또한주의 @Joe

을 구축하기 위해, 그들은 NA 될 것이다.

+0

감사합니다. 방금 알아 냈습니다. 님이 삭제되었습니다. 고맙습니다! – Thundersheep

0

도움과 팁 모두에게 감사드립니다. QATC