Могут ли функции data.table манипулировать столбцами даты и времени на лету? - PullRequest
2 голосов
/ 22 ноября 2011

Я начал использовать data.table. На самом деле это очень быстрый и довольно приятный синтаксис. У меня проблемы с датами. Мне нравится использовать Lubridate. Во многих моих наборах данных у меня есть даты или даты и время, и я использовал lubridate для манипулирования ими. Lubridate хранит момент как класс POSIX. Я видел ответы здесь, которые создают новые переменные, например, просто чтобы получить год, например. 2005. Мне не нравится это. Временами я буду анализировать по годам, а иногда по кварталам, по месяцам и по продолжительности. Я хотел бы сделать что-то простое, например, это

mydatatable[,length(medical.record.number),by=year(date.of.service)]

, который должен дать мне количество обращений к пациенту за данный год. Функция by не работает.

Error in names(byval) = as.character(bysuborig) : 
  'names' attribute [2] must be the same length as the vector [1]

Не могли бы вы указать мне виньетки, где data.tables используется с датами и где манипуляции и категоризация этих дат выполняются на лету.

1 Ответ

3 голосов
/ 22 ноября 2011

Используется один из примеров на странице help(IDateTime).Это показывает, что вы можете изменить синтаксис для аргумента by= на символьное значение в форме "=" или (после комментария @Matthew Dowle ниже) вы можете попробовать использовать функциональную форму, которую вы использовали (хотя я неЯ смог заставить его работать сам. Я получил предпочтительную форму: by=list(wday=wday(idate)) для работы.) Обратите внимание, что создание ключа предполагает класс IDateTime, так как нет переменной idate или itime.Это атрибуты класса

datetime <- seq(as.POSIXct("2001-01-01"), as.POSIXct("2001-01-03"), by = "5 hour")    
(af <- data.table(IDateTime(datetime), a = rep(1:2, 5), key = "a,idate,itime"))

 af[, length(a), by = "wday = wday(idate)"]
         wday V1
[1,]    2  4
[2,]    3  5
[3,]    4  1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...