2013-05-22 4 views
2

여기서 응용 프로그램은 미국 주를 영역으로 그룹화하는 것입니다.문자열 변수를 요소로 그룹화 R

group1 <- c("ME", "NH", "VT", "MA", "CT", "RI") 
group2 <- c("FL", "GA", "AL", "MS", "LA") 

내 데이터는 다음과 같습니다

SomeVar | State 
--------------- 
300  | AL 
331  | GA 
103  | MA 
500  | FL 

그리고 난과 같이 위의 그룹에 따라 데이터에 "지역"열을 추가하고 싶습니다 :

SomeVar | State | Region 
------------------------ 
300  | AL | 2 
331  | GA | 2 
103  | MA | 1 
500  | FL | 2 

인가 그룹핑을 기반으로 요인을 할당하는 간단한 방법이 있습니까? 데이터 프레임을 가정

답변

3
group1 <- c("ME", "NH", "VT", "MA", "CT", "RI") 
group2 <- c("FL", "GA", "AL", "MS", "LA") 

grouptab <- rbind(data.frame(State=group1,grp=1), 
        data.frame(State=group2,grp=2)) 
DF <- read.table(text="SomeVar State 
300  AL 
331  GA 
103  MA 
500  FL",header=TRUE) 

merge(DF,grouptab) 

또는 할 수 있는지 :

groupList <- list(group1,group2) 
grouptab <- data.frame(State=unlist(groupList), 
         grp=rep(seq_along(groupList), 
           sapply(groupList,length))) 

(이 작업을 수행하는 다른 방법이있을 수 있습니다 - 나는 mapply을 시도했지만 빨리 알아 내지 못했습니다)

merge (예 : all, all.x, all.y)는 여러 가지 방법으로 누락 된 그룹 사례를 처리합니다.

+0

'merge'를 잘 사용했습니다! +1 – nico

1
group1 <- c("ME", "NH", "VT", "MA", "CT", "RI") 
group2 <- c("FL", "GA", "AL", "MS", "LA") 

DF <- read.table(text="SomeVar State 
300  AL 
331  GA 
103  MA 
500  FL",header=TRUE) 

DF$Region <- NA 
DF$Region[DF$State %in% group1] <- 1 
DF$Region[DF$State %in% group2] <- 2 

# SomeVar State Region 
# 1  300 AL  2 
# 2  331 GA  2 
# 3  103 MA  1 
# 4  500 FL  2 
1

df이라고하며 모든 상태 중 하나를 1 군이나 2 군에서 좀 더 일반적으로

df$region <- ifelse(df$state %in% group1, 1, 2) 
+0

상태가 어느 그룹에도없는 경우 어떻게됩니까? – Roland

+0

@Roland : 추가 노트 : – nico