У меня есть датафрейм в R, называемый "data
".Столбец EventDate
представляет собой date format
, а остальные представляют собой двойные или символьные поля.
Я пытаюсь извлечь большинство столбцов из "data
", но aggregate
значения EventDate
в обозначениях года-месяца вместо обозначений текущего года-месяца-дня (поэтому яв итоге в качестве значений строки нужно указать 01-2018, 02-2018, 03-2018 и т. д.).
У меня было много проблем, когда я делал это в базе R или находил какие-то пакеты, чтобы сделать это легко.У меня гораздо больше опыта в SQL, чем в R, поэтому я решил использовать пакет sqldf.
Вот код, который я написал:
newdata <- sqldf("SELECT ID1, ID2, ID3, Staff, Type, POC, TOC1, TOC2, TOC3, CASE
WHEN EventDate >= '2018-01-01' AND EventDate < '2018-02-01' THEN 'Jan 2018'
WHEN EventDate >= '2018-02-01' AND EventDate < '2018-03-01' THEN 'Feb 2018'
WHEN EventDate >= '2018-03-01' AND EventDate < '2018-04-01' THEN 'Mar 2018'
WHEN EventDate >= '2018-04-01' AND EventDate < '2018-05-01' THEN 'Apr 2018'
WHEN EventDate >= '2018-05-01' AND EventDate < '2018-06-01' THEN 'May 2018'
WHEN EventDate >= '2018-06-01' AND EventDate < '2018-07-01' THEN 'Jun 2018'
WHEN EventDate >= '2018-07-01' AND EventDate < '2018-08-01' THEN 'Jul 2018'
WHEN EventDate >= '2018-08-01' AND EventDate < '2018-09-01' THEN 'Aug 2018'
WHEN EventDate >= '2018-09-01' AND EventDate < '2018-10-01' THEN 'Sep 2018'
WHEN EventDate >= '2018-10-01' AND EventDate < '2018-11-01' THEN 'Oct 2018'
WHEN EventDate >= '2018-11-01' AND EventDate < '2018-12-01' THEN 'Nov 2018'
WHEN EventDate >= '2018-12-01' AND EventDate < '2019-01-01' THEN 'Dec 2018'
END AS EventMonth
FROM data
ORDER BY EventMonth, Staff, ID1")
Код выполняется без проблем и производит в основномправильные результаты, только то, что он возвращает NA
для всех строк в столбце EventMonth
в «newdata
» вместо "Jan 2018", "Feb 2018"
и т. д.
Возможно, проблема с форматированием EventDate
столбец в "data
", но data$EventDate
указан как тип даты в RStudio и находится в yyyy-mm-dd format
.
Я также попытался выполнить следующее (которое не выдает ошибку или не выдало никаких предупреждений) перед запуском предыдущего кода в качестве проверки работоспособности, но он все же дал мне столбец, полный NA для EventMonth:
data$EventDate <- as.Date(data$EventDate)
SQL выдает ожидаемый результат, когда я запускаю его в SQL Server (в столбце EventMonth нет NA), но, к сожалению, у меня не всегда будет доступ к SQL Server в будущем, поэтому я 'Я беспокоюсь с R на всех.
Мне нужен способ сделать это без фактического ядра базы данных SQL, чтобы выполнить аналогичные агрегации в будущем.Я недавно установил R
, RStudio
и пакет sqldf
в течение последнего месяца, поэтому я не должен использовать ничего ужасно устаревшего.
Есть ли способ получить желаемый результат, используя sqldf, base R или какой-то другой пакет R ?