Слияние двух фреймов данных на основе столбца со ссылкой на дату - PullRequest
1 голос
/ 05 августа 2020

У меня есть два фрейма данных - один - фрейм данных транзакции, который показывает номер позиции и дату транзакции. Другой - ценовой фрейм данных, который показывает цену продуктов (меняющуюся с течением времени).

Мне нужно объединить правильную цену из ценового фрейма данных с фреймом данных транзакции. Мнимый пример ниже:

transaction_df<-data.frame(Date=as.Date(c("18/12/2013", "12/09/2019", "15/8/2017", "09/01/2018"), format = "%d/%m/%Y"), Item = c(8002, 8004, 8001, 8002))

item_price<-data.frame(item=c(8000, 8000, 8001, 8002, 8002, 8002, 8003, 8003, 8004, 8004), date=as.Date(c("17/02/2015", "09/11/2017", "01/02/2012", "30/09/2012", "12/05/2017", "23/11/2019", "20/01/2013", "18/03/2017", "07/02/2018", "19/10/2019"), format = "%d/%m/%Y"), price=c(12.47, 13.20, 35.99, 21.45, 20.83, 20.55, 44.60, 45.00, 5.35, 6.80))

result<-data.frame(Date=as.Date(c("18/12/2013", "12/09/2019", "15/8/2017", "09/01/2018"), format = "%d/%m/%Y"), Item = c(8002, 8004, 8001, 8002), result=c(21.45, 5.35, 35.99, 20.83))

Цены - это цена из , т.е. если есть только одна цена, это цена, или если транзакция состоялась сегодня, подходящей ценой будет самый последний.

Конечно, я могу использовать merge () для копирования цен, но еще не понял, как учитывать дату. Я начал писать al oop, который бы это делал (очень грубо), но у меня огромный объем данных, и я уверен, что должен быть более чистый способ сделать это - возможно, с помощью filter ().

Машина, с которой я работаю, к сожалению, не имеет доступа к пакетам, поэтому DPLYR не вариант, хотя мне было бы интересно узнать, можно ли / как это сделать с помощью transform ().

Большое спасибо за любую помощь :)

1 Ответ

0 голосов
/ 05 августа 2020

У вас есть пара проблем с вашим вопросом

  1. В обоих наборах данных нет общих дат. Таким образом, я не уверен, как вы собираетесь выполнить слияние с использованием этой переменной.
  2. Имена переменных чувствительны к регистру - у вас есть «Item» и «item», а также «Date» и «date»

Когда вы разобрались с этими проблемами, это должно сработать

mergedfile <- merge(transaction_df , item_price , by=c("Item","Date"))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...