2014-05-08 5 views
1

두 개의 데이터 프레임이 있습니다. 첫 번째에는 각 그룹에 대해 몇 가지 임계 값 (FROM 및 TO)이 있습니다.데이터 프레임의 각 행에 두 번째 데이터 프레임의 범주를 첨부하십시오.

FROM TO GROUP 
1 99 1 
100 199 2 
200 399 3 

두 번째 데이터 프레임에서는 열 X에 값이 있으며 각 값에 해당 그룹을 할당하고 싶습니다.

X  
50 
150  
250 
나는 다음과 같은 출력을 얻을 싶습니다

: 나는 루프를 사용하여 그것을 관리해야

X GROUP 
50 1 
150 2 
250 3 

을하지만 많이 걸립니다 그래서 내 진짜 dataframe이 이상 200.000 행이 나는이 작업을 여러 번 반복해야합니다.

도움을 주시면 감사하겠습니다. 고맙습니다!

답변

3

FROM/TO 값이 공백없이 겹치지 않고 모든 x 값이 정수이고 FROM이 정렬되어 있다고 가정하면이 값이 올바르게 작동합니다.

dd<-data.frame(
    FROM=c(1,100,200), 
    TO=c(99,199,399), 
    GROUP=c(1,2,3) 
) 
x <- c(50,150,250,20, 350,110) 
g <- dd$GROUP[findInterval(x, dd$FROM)] 
cbind(x,g) 

자세한 내용은 ?findInterval을 참조하십시오. 이런 상황에서 유용한 기능입니다. cut과 같은 것에도 흥미가있을 수 있습니다.

+0

감사합니다. MrFlick! – user3618451

1

MrFlick이 언급했듯이 여기에 cut을 사용하는 솔루션이 있습니다.

range.df <- data.frame(FROM=c(1,100,200), 
         TO=c(99,199,399), 
         GROUP=c(1,2,3)) 

value.df <- data.frame(ROW=c(1,2,3,4,5,6,7), 
         X=c(50,150,250,100,90,300,275)) 

cbind(value.df,GROUP=cut(x=value.df$X, 
         breaks=c(range.df$FROM,max(range.df$TO)), 
         labels=range.df$GROUP, 
         right=FALSE)) 
+0

대단히 감사합니다! – user3618451

관련 문제