У меня есть два файла .csv с именами «tag.csv» и «wind.csv», которые я хотел бы объединить на основе столбца «Дата». Однако, как вы можете видеть из данных ниже, времена не совпадают в точности.
tag.csv
Date
13/12/2014 05:11
13/12/2014 05:43
13/12/2014 06:34
wind.csv
Date
13/12/2014 05:00
13/12/2014 06:00
13/12/2014 07:00
Я использую следующий простой сценарий.
tag<- read.csv("tag.csv")
wind<- read.csv("wind.csv")
myfulldata = merge(tag, wind)
Есть ли команда, которую я мог бы добавить, чтобы данные слились с ближайшим временем? Например, 13.12.2014 05:11 объединится с 13.12.2014 05:00
Здесь есть самые разные вопросы. Можете ли вы гарантировать матч 1: 1? Если нет, хотите ли вы, чтобы tag соответствовал ближайшему wind или wind соответствовал ближайшему тегу? Было бы достаточно просто округлить время до ближайшего часа, а затем объединить? Поскольку ваши образцы данных не содержат никакой другой информации, трудно определить, что с чем объединено - в лучшем примере было бы еще 1 столбец для каждого ввода, а затем отображать ожидаемый результат.
Я бы хотел, чтобы ветер соответствовал метке, но я думаю, что ваше предложение округления до ближайшего часа будет самым быстрым способом решения проблемы. Спасибо.





Пакет data.table имеет свой собственный метод слияния и опцию roll, которая позволяет наиболее близкие совпадения. например
library(data.table)
dt1 <- data.table(a = c(1,2,3,4), b=1:4)
dt2 <- data.table(a = c(1.6,2.1,3.2,4.9), c=1:4)
setkeyv(dt1, "a")
setkeyv(dt2, "a")
dt1[dt2, roll = "nearest"]
См. Другой пример в Присоединитесь к R data.tables, где ключевые значения не совсем равны - объедините строки с ближайшим временем.
Однако, чтобы быть надежным, я, вероятно, вместо этого сделал бы некоторые манипуляции с datetime, чтобы заставить их оба быть с точностью до ближайшего часа, а затем выполнить ближайшее соединение, если все остальное не удается.
изменить: этот метод не будет работать с объектами data.frame, если вы не использовали data.table раньше, возможно, оставайтесь простыми и круглыми часами
Возможно, показ вашего ожидаемого результата прояснит этот вопрос.