2016-11-02 6 views
3

연속 데이터를 기반으로하는 임의의 3 가지 범주로 새 변수를 생성하고 싶습니다.dplyr로 연속 변수를 분류하십시오.

set.seed(123) 
df <- data.frame(a = rnorm(100)) 

내가

df$category[df$a < 0.5] <- "low" 
df$category[df$a > 0.5 & df$a < 0.6] <- "middle" 
df$category[df$a > 0.6] <- "high" 

는 것 dplyr를베이스가 사용하여, 나는이에 대한 mutate(), 솔루션을 것 같아요?

또한 범주를 선택하는 대신 범주를 계산하는 방법이 있습니까? 나는. 카테고리에 대한 휴식 시간을 계산해야합니다.

편집

대답이 thread

, 그러나, 그러므로 나는이 질문이 목적을 수행 생각 나를 혼동 (그리고 다른 사람을 혼동 할 수있다)하는 라벨을 포함하지 않습니다.

+3

에 대한 quantiles를 사용하여. ''cut'을 참조하십시오. – aichao

+5

답변은 여기에 있습니다. http://stackoverflow.com/questions/23163567/r-dplyr-categorize-numeric-variable-with-mutate – gfgm

+0

@GabrielFGeislerMesevage 확실히, 나는 그것을 읽었습니다. Robert와 aichao는 아래에서 언급했다. 초보자를 위해서, 나 자신처럼, 나는이 스레드가 목적을 제공한다고 생각한다. 틀 렸으면 고쳐줘. – FilipW

답변

5

숫자를 범주로 변환하려면 cut을 사용하십시오. 특정 경우에, 당신이 원하는 :

df$category <- cut(df$a, breaks=c(-Inf, 0.5, 0.6, Inf), labels=c("low","middle","high")) 

또는 dplyr를 사용하여 :

library(dplyr) 
res <- df %>% mutate(category=cut(a, breaks=c(-Inf, 0.5, 0.6, Inf), labels=c("low","middle","high"))) 
##    a category 
##1 -0.560475647  low 
##2 -0.230177489  low 
##3 1.558708314  high 
##4 0.070508391  low 
##5 0.129287735  low 
## ... 
##35 0.821581082  high 
##36 0.688640254  high 
##37 0.553917654 middle 
##38 -0.061911711  low 
##39 -0.305962664  low 
##40 -0.380471001  low 
## ... 
##96 -0.600259587  low 
##97 2.187332993  high 
##98 1.532610626  high 
##99 -0.235700359  low 
##100 -1.026420900  low 
+0

감사합니다. 나에게 많은 시간을 절약했다. – FilipW

1

을`cut`를 사용해보십시오 cut

xs=quantile(df$a,c(0,1/3,2/3,1)) 
xs[1]=xs[1]-.00005 
df1 <- df %>% mutate(category=cut(a, breaks=xs, labels=c("low","middle","high"))) 
boxplot(df1$a~df1$category,col=3:5) 

enter image description here

+0

감사합니다. boxplot에 만족합니다. – FilipW

관련 문제