У меня есть следующие три кадра данных:
df1
grade PIR rate
1 7 min 10.80
2 8 min 11.26
3 9 min 12.10
4 7 X1 11.17
5 8 X1 11.65
6 9 X1 12.56
7 7 X2 11.55
8 8 X2 12.06
9 9 X2 13.03
10 7 X3 11.95
...
и
df2
grade PIR new_rate
1 7 min 13.00
2 8 min 13.00
3 9 min 13.00
4 7 X1 13.48
5 8 X1 13.48
6 9 X1 13.48
7 7 X2 13.98
8 8 X2 13.98
9 9 X2 13.98
10 7 X3 14.50
...
и
df3
ID assoc_rate assoc_grade
124575 10.80 7
123413 11.42 7
111539 11.65 8
112284 12.04 8
125245 12.10 9
132588 12.44 9
....
Для каждого случая df3$assoc_rate
и df3$assoc_grade
Мне нужно идентифицировать ближайшее наивысшее значение (или эквивалентное) из df1$rate
в том же df1$grade
, чтобы объединить df1$grade
и df1$PIR
, что затем позвольте мне присоединить df2$new_rate
на основе grade
и PIR
.
Моя конечная цель - присоединить new_rate
и PIR
от df2
до df3
на основе их assoc_rate
и assoc_grade
, но это должно быть по отношению к df1
.
Итак, мой желаемый фрейм данных будет выглядеть так:
df_desired
ID assoc_rate assoc_grade PIR new_rate
124575 10.80 7 min 13.00
123413 11.42 7 X2 13.98
111539 11.65 8 X1 13.48
112284 12.04 8 X2 13.98
125245 12.10 9 min 13.00
132588 12.44 9 X1 13.48
....
Here are the dataframes:
df1 <- data.frame(grade = c(7L, 8L, 9L, 7L, 8L, 9L, 7L, 8L, 9L,7L, 8L, 9L, 7L, 8L, 9L), PIR = c("min", "min", "min", "X1", "X1","X1", "X2", "X2", "X2", "X3", "X3", "X3", "X4", "X4", "X4"),rate = c(10.8, 11.26, 12.1, 11.17, 11.65, 12.56, 11.55, 12.06, 13.03, 11.95, 12.49, 13.53, 12.35, 12.93, 14.04))
df2 <- data.frame(grade = c(7L, 8L, 9L, 7L, 8L, 9L, 7L, 8L, 9L,7L, 8L, 9L, 7L, 8L, 9L), PIR = c("min", "min", "min", "X1", "X1","X1", "X2", "X2", "X2", "X3", "X3", "X3", "X4", "X4", "X4"),new_rate = c(13, 13, 13, 13.48, 13.48, 13.48, 13.98, 13.98,13.98, 14.5, 14.5, 14.5, 15.04, 15.04, 15.04))
df3 <- data.frame(ID = c(124575, 123413, 111539, 112284, 125245, 132588), assoc_rate = c(10.80,11.42,11.65,12.04,12.10,12.44), assoc_grade = c(7,7,8,8,9,9))
Спасибо за любые идеи или инструкции. (Я пробовал что-то вроде this , но не знал, как заставить это работать.)