2014-07-25 5 views
2

두 개의 열로 이름과 높이를 가진 테이블이 있습니다. 저는 6 피트 이상, 4 피트 미만 및 4 피트 -6 피트 인 사람들을 키가 크고 짧고 평균으로 분류하고 싶습니다.열을 범주로 정렬

저는 R-studio에서 이것을하려고합니다. 별도의 열로 분류하는 방법조차도 괜찮습니다.

**Name  Height** 
James  5.6 
John  3.7 
Ron   6.8 
Tor   5.2 

답변

1

귀하의 데이터 :

Name<-c("James", "John", "Ron", "Tor") 
Height<-c(5.6,3.7,6.8,5.2) 
dat<-data.frame(Name,Height) 

당신은 할 수 creatin에 의해 이것을하십시오 g 당신의 기준에 따라 새로운 변수 및 추가 카테고리 :

dat$group<-"average" 
dat$group[dat$Height<=4] <-"short" 
dat$group[dat$Height>=6] <-"tall" 


# Name Height group 
#1 James 5.6 average 
#2 John 3.7 short 
#3 Ron 6.8 tall 
#4 Tor 5.2 average 
2
당신이 "문자"변수가 필요한 경우 cut

dat <- structure(list(Name = c("James", "John", "Ron", "Tor"), Height = c(5.6, 
3.7, 6.8, 5.2)), .Names = c("Name", "Height"), class = "data.frame", row.names = c(NA, 
-4L)) 

dat$class <- with(dat, 
       cut(Height, 
         breaks=c(-Inf,4,6,Inf),labels=c("short", "average", "tall"))) 
dat 
# Name Height class 
# 1 James 5.6 average 
# 2 John 3.7 short 
# 3 Ron 6.8 tall 
# 4 Tor 5.2 average 

class(dat$class) 
#[1] "factor" 

, 당신은 labels=F를 선택할 수 있습니다

사용 및

dat$class <- with(dat, c("short","average", "tall")[cut(Height,breaks=c(-Inf,4,6,Inf), labels=F)]) 

class(dat$class) 
#[1] "character" 
+0

나는 편집 –

+0

@Ricardo Saporta를 따라 쉽게 전에 당신이 그것을 가지고 어떻게, 난 그냥 코드를 포맷 생각을, 나는 희망 이제는 더 읽기 쉽습니다. :-) – akrun

2

cut 하나의 방법입니다하지만 당신 요인을 준다. 또 다른 방법은 findInterval과 인덱스로 유망한 것은 문자 벡터 제공 :

c('short','average','tall')[ findInterval(dat$Height, c(-Inf, 4,6,Inf)) ]