2015-12-23 25 views
6

In generale, come è possibile classificare i valori in una colonna di un frame di dati rispetto ai valori dei fattori in un altro frame di dati? Ad esempio, dato df1 e DF2 vorrei generare DF3 (o aggiornare DF1):In R, come si classificano i valori in un frame di dati in base agli intervalli in un altro frame di dati?

> df1 
    NewAge 
1  5 
2  25 
3  18 
4  9 
5  43 
6  15 
7  17 

> df2 
    AgeStart AgeEnd AgeType 
1  0  10  A 
2  10  20  B 
3  20  30  A 
4  30  40  B 
5  40  50  A 

voglio DF3 come:

NewAge Type 
    5  A 
25  A 
18  B 
    9  A 
43  A 
15  B 
17  B 

ho usato tagliato() per generare intervalli

df2_cut <- data.frame(NewAge, 
         "AgeRange" = cut(NewAge, 
             breaks=AgeStart, 
             right=F, 
             include.lowest=T)) 
> df2_cut 
    NewAge AgeRange 
1  5 [0,10) 
2  25 [20,30) 
3  18 [10,20) 
4  9 [0,10) 
5  43 [40,50] 
6  15 [10,20) 
7  17 [10,20) 

ma non so come classificare i valori df2_cut in base al tipo di intervallo (ad esempio A o B).

risposta

5

Possiamo usare findInterval. L'output sarà un indice numerico che usiamo per ottenere gli elementi corrispondenti da 'AgeType'.

df3 <- transform(df1, Type=df2$AgeType[findInterval(NewAge, df2$AgeStart)]) 
df3 
# NewAge Type 
#1  5 A 
#2  25 A 
#3  18 B 
#4  9 A 
#5  43 A 
#6  15 B 
#7  17 B 

O con labels=FALSE in cut