Я пытаюсь соединить два фрейма данных (df1, df2). Фреймы данных имеют два общих столбца: зона и наклон. Зона - это столбец фактора, а наклон - числовой.
df1 = data.frame(slope = c(1:6), zone = c(rep("Low", 3), rep("High", 3)))
df2 = data.frame(slope = c(2.4, 2.4,6.2), zone = c(rep("Low", 1), rep("High", 2)), other = c(rep("a", 1), rep("b", 1), rep("c", 1)))
df1
df2
Я хочу объединить кадры данных так, чтобы они сначала совпадали точно по зоне, а затем ближе всего соответствовали наклону. Если есть два значения наклона, которые равноудалены, не имеет значения, округляется ли объединение вверх или вниз, если правило применяется последовательно и не приводит к дублированию строк.
Я бы предпочел сделать это с помощью fuzzy_join или dplyr, а не data.table.
Результат должен выглядеть примерно так:
df3 = data.frame(slope = c(1:6), zone = c(rep("Low", 3), rep("High", 3)), other = c(rep("a", 3), rep("b",1), rep("c",2)))
df3
где значение «other» сначала определяется зоной, а затем ближайшим наклоном.
Я пробовал:
distance_left_join(df, df2, by=c("zone"= "zone", "slope"="slope"))
так же как и другие типы нечетких объединений, но я думаю, что они могут не работать, потому что столбцы имеют разные типы. Я подозреваю, что есть решение fuzzy_left_join, но я не понимаю, как создать функцию соответствия.