В R, как вы классифицируете значения в одном фрейме данных на основе диапазонов в другом фрейме данных?
В общем, как я могу классифицировать значения в одном столбце фрейма данных относительно значений факторов в другом фрейме данных? Например, учитывая df1 и df2, я хотел бы сгенерировать df3 (или обновить df1):
> 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
Я хочу df3 как:
NewAge Type
5 A
25 A
18 B
9 A
43 A
15 B
17 B
Я использовал cut() для генерации интервалов
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)
но я не знаю, как классифицировать df2_cut
значения в соответствии с типом интервала (т. е. A или B).
1 ответ
Решение
Мы можем использовать findInterval
, Выходными данными будет числовой индекс, который мы используем для получения соответствующих элементов из 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
Или с labels=FALSE
в cut