R расщепление времени дата символ на дату и время - PullRequest
0 голосов
/ 03 мая 2019

У меня есть символ, содержащий время и дату, и я хотел бы разделить его на дату и время. Я попробовал:

datetime <-  as.character("12:00:00 03-May-2019")
date1 <- as.Date(datetime ,"%d/%m/%Y")
date1

time1 <- as.Date(datetime ,%H:%M:%S)
time1

но я просто вернул АН.

Спасибо за вашу помощь.

Ответы [ 2 ]

1 голос
/ 03 мая 2019

Вот функция, которая извлекает дату (как объект Date) и время (как строку символов). См. в этом посте и ответы , чтобы узнать, как сохранить время в виде строки символов.

extract_date_time <- function(dt){
  dt_split <- strsplit(dt, split=" ")
  lapply(dt_split, function(dts){
    list(date=as.Date(dts[2], '%d-%b-%Y'), time=dts[1])
  })
}

Пример использования:

datetime <- as.character("12:00:00 03-May-2019")
extract_date_time(datetime)

Вы также можете применить эту функцию к более длинному вектору строк, как тот, который у вас изначально был, например:

datetimes <- c("12:00:00 03-May-2019",
               "02:01:00 03-May-2018",
               "11:00:22 03-May-2017")
extract_date_time(datetimes)
1 голос
/ 03 мая 2019

format должно совпадать с начальным vector.

as.Date(datetime, "%H:%M:%S %d-%b-%Y")
#[1] "2019-05-03" "2018-05-03" "2017-05-03"

Если намерение это разделить на пробел " "

strsplit(datetime, "\\s+")

Или с read.table

df1 <- read.table(text = datetime, header = FALSE, col.names = c("time", "date"))
df1$date <- as.Date(df1$date, "%d-%b-%Y")
df1
#       time       date
#1 12:00:00 2019-05-03
#2 02:01:00 2018-05-03
#3 11:00:22 2017-05-03

Или с tidyverse

library(tidyverse)
tibble(datetime) %>% 
    separate(datetime, into = c('date', 'time'), sep=" ")  %>% 
    mutate(time = dmy(time))
# A tibble: 3 x 2
#  date     time      
#  <chr>    <date>    
#1 12:00:00 2019-05-03
#2 02:01:00 2018-05-03
#3 11:00:22 2017-05-03

данные

datetime <-  c("12:00:00 03-May-2019",
           "02:01:00 03-May-2018",
           "11:00:22 03-May-2017")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...