R массив как. Дата преобразования - PullRequest
1 голос
/ 12 июня 2019

Я получаю массив дат из базы данных, который я бы преобразовал в типы дат.

> dates
              start            finish
1 29-Oct-2017 00:00 30-Oct-2017 00:00
2 30-Oct-2017 00:00 31-Oct-2017 00:00
3 31-Oct-2017 00:00 01-Nov-2017 00:00
4 01-Nov-2017 00:00 02-Nov-2017 00:00
5 02-Nov-2017 00:00 03-Nov-2017 00:00
6 03-Nov-2017 00:00 04-Nov-2017 00:00

Я могу конвертировать каждый столбец даты ['start'] и даты ['finish'] отдельно с

> as.Date(dates['start'][,1], format="%d-%b-%Y %H:%M")
[1] "2017-10-29" "2017-10-30" "2017-10-31" "2017-11-01" "2017-11-02"
[6] "2017-11-03"

Но есть ли способ сделать это за один шаг?

Я пробовал обе строки одновременно, но это не работает.

> as.Date(dates[c('start', 'finish')], format="%d-%b-%Y %H:%M")
Error in as.Date.default(dates[c("start", "finish")], format = "%d-%b-%Y %H:%M") :
  do not know how to convert 'dates[c("start", "finish")]' to class “Date”

1 Ответ

0 голосов
/ 12 июня 2019

Согласно ?as.Date

Методы as.Date принимают символьные строки, факторы, логические NA и объекты классов "POSIXlt" и "POSIXct".

Если предположить, что набор данных data.frame, он не будет работать, поскольку требования не выполняются. Мы можем использовать lapply для циклического перебора столбцов, применять as.Date для преобразования в класс Date и присваивать выходные данные интересующим столбцам

dates[c('start', 'finish')] <- lapply(dates[c('start', 'finish')], 
         as.Date, format = "%d-%b-%Y %H:%M")

С tidyverse мы можем использовать mutate_at

library(dplyr)
library(lubridate)
dates %>%
      mutate_at(vars(start, finish), dmy_hm)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...