2015-12-23 30 views
6

Wie könnte ich im Allgemeinen Werte in einer Spalte eines Datenrahmens in Bezug auf Faktorwerte in einem anderen Datenrahmen klassifizieren? Zum Beispiel gegeben DF1 und DF2 würde Ich mag df3 (oder aktualisieren df1) erzeugen:In R, wie klassifizieren Sie Werte in einem Datenrahmen basierend auf Bereichen in einem anderen Datenrahmen?

> 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 

Ich möchte df3 wie:

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

Ich schneide() verwendet Intervalle erzeugen

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) 

aber ich weiß nicht, wie df2_cut Werte nach dem Intervall-Typ (dh A oder B) zu klassifizieren.

Antwort

5

Wir können findInterval verwenden. Die Ausgabe wird ein numerischer Index sein, den wir verwenden, um die entsprechenden Elemente von 'AgeType' zu erhalten.

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 

Oder mit labels=FALSE in cut

Verwandte Themen