Ошибка создания R data.table с датой и временем POSIXlt
12515 просмотра
1 ответ
Проблема при создании data.table со столбцом даты и времени:
> mdt <- data.table(id=1:3, d=strptime(c("06:02:36", "06:02:48", "07:03:12"), "%H:%M:%S"))
> class(mdt)
[1] "data.table" "data.frame"
> print(mdt)
Error in `rownames<-`(`*tmp*`, value = paste(format(rn, right = TRUE), :
length of 'dimnames' [1] not equal to array extent
Enter a frame number, or 0 to exit
1: print(list(id = 1:3, d = list(sec = c(36, 48, 12), min = c(2, 2, 3), hour = c(6, 6, 7), mday = c(31,
2: print.data.table(list(id = 1:3, d = list(sec = c(36, 48, 12), min = c(2, 2, 3), hour = c(6, 6, 7), m
3: `rownames<-`(`*tmp*`, value = paste(format(rn, right = TRUE), ":", sep = ""))
Создайте как data.frame и конвертируйте в data.table работы!
> mdf <- data.frame(id=1:3, d=strptime(c("06:02:36", "06:02:48", "07:03:12"), "%H:%M:%S"))
> print(mdf)
id d
1 1 2014-01-31 06:02:36
2 2 2014-01-31 06:02:48
3 3 2014-01-31 07:03:12
> mdt <- as.data.table(mdf)
> print(mdt)
id d
1: 1 2014-01-31 06:02:36
2: 2 2014-01-31 06:02:48
3: 3 2014-01-31 07:03:12
> class(mdt)
[1] "data.table" "data.frame"
Я что-то упустил или это ошибка? Если ошибка, где я могу сообщить об этом?
Примечание. Я использую R версии 3.0.0 и вижу некоторые предупреждения повторно. пакеты, собранные с версией 3.0.2. Может ли это быть проблемой? Должен ли я обновить сам R? Все остальное, что я делаю, похоже, работает.
Автор: Patrick Источник Размещён: 13.11.2019 11:46Ответы (1)
19 плюса
Форматируя ответ из комментария Blue Magister (большое спасибо), data.table не поддерживает типы данных POSIXlt по соображениям производительности - см. Приведенную строку в IDateTime, как предложено, как возможный дубликат.
Таким образом, способ состоит в том, чтобы преобразовать время в ITime (тип, предоставленный data.table) или в дату-время (или только дату) как POSIXct, в зависимости от того, важна информация о дате или нет:
> mdt <- data.table(id=1:3, d=as.ITime(strptime(c("06:02:36", "06:02:48", "07:03:12"), "%H:%M:%S")))
> print(mdt)
id d
1: 1 06:02:36
2: 2 06:02:48
3: 3 07:03:12
> mdt <- data.table(id=1:3, d=as.POSIXct(strptime(c("06:02:36", "06:02:48", "07:03:12"), "%H:%M:%S")))
> print(mdt)
id d
1: 1 2014-01-31 06:02:36
2: 2 2014-01-31 06:02:48
3: 3 2014-01-31 07:03:12
В качестве дополнительной заметки на случай, если кто-то может извлечь из этого пользу, я хотел создать дату и время из моих входных данных с датой и временем в отдельных полях. Я нашел полезным узнать (видите? ITime), что можно добавить время ITime к дате-времени POSIXct и получить дату-время POSIXct следующим образом:
> mdt <- as.POSIXct("2014-01-31") + as.ITime("06:02:36")
> print(mdt)
[1] "2014-01-31 06:02:36 EST"
> class(mdt)
[1] "POSIXct" "POSIXt"
Автор: Patrick
Размещён: 01.02.2014 02:35
Вопросы из категории :
- r Как получить доступ к последнему значению в векторе?
- r Пакеты оптимизации для R
- r Есть ли у R такие операторские операции, как Perl qw ()?
- r Библиотека / инструмент для рисования тройных / треугольных графиков
- r Участки без заголовков / надписей в R
- r Расчет скользящей средней
- r Режим Emacs ESS - вкладка для области комментариев
- r Преобразование данных из многих строк во многие столбцы
- r Проверить, содержит ли вектор данный элемент
- r Поиск всех позиций для нескольких элементов в векторе
- data.table подмножество в data.table
- data.table Подмножество фрейма данных с топ-n строк для каждой группы и упорядочены по переменной
- data.table Когда мне следует использовать оператор: = в data.table?
- data.table Замена NA с последним значением не-NA
- data.table эффективные построчные операции над таблицей данных
- data.table : = (передача по ссылке) в пакете data.table одновременно изменяет другой объект таблицы данных
- data.table Группировать по нескольким столбцам и суммировать другие столбцы
- data.table Как удалить столбец по имени в data.table?
- data.table R: Рассчитать среднее для подмножества группы
- data.table Агрегировать / суммировать несколько переменных на группу (например, сумма, среднее)