Как конвертировать время даты персонажа, если время между 12 часами и 24 часами? - PullRequest
0 голосов
/ 14 января 2020

У меня есть большое количество данных, которые я читаю из различных файлов .csv (используя read_csv). Столбец Datetime читается в файлах и читается как символ класса. Мне нужно преобразовать этот столбец символов в фактическое время даты (и проверить наличие дубликатов) для целей построения. Это становится интересным, потому что дата не всегда в 12-часовом или 24-часовом формате. Часовой пояс также не согласован, но я думаю, что этот бит работает правильно.

Я относительно новичок в R и буду любезен к любым положительным предложениям.

Вот как я я пытаюсь сделать это в настоящее время:

# Add time zone information:
    # Some data uses 12-hour clock:
    if (sum(grep("AM", Data$Date))||sum(grep("PM", Data$Date))>0){
      if (Time_Zone == "Eastern Daylight Time"){
        Data$Date_Formatted <- as.POSIXct(Data$Date, "%m/%d/%Y %H:%M:%S", tz = "America/New_York")
        Data$Date_Formatted2 <- as.POSIXlt(Data$Date, "%m/%d/%Y %H:%M:%S", tz = "America/New_York")
      }
      else if (Time_Zone == "Central Daylight Time" || Time_Zone == "Central Standard Time") {
        Data$Date_Formatted <- as.POSIXct(Data$Date, "%m/%d/%Y %H:%M:%S", tz = "America/Chicago")
        Data$Date_Formatted2 <- as.POSIXlt(Data$Date, "%m/%d/%Y %H:%M:%S", tz = "America/Chicago")
      }
    }
    # Other data uses a 24-hour clock:
    else{
      if (Time_Zone == "Eastern Daylight Time"){
        Data$Date_Formatted <- as.POSIXct(Data$Date, "%m/%d/%Y %k", tz = "America/New_York")
        Data$Date_Formatted2 <- as.POSIXlt(Data$Date, "%m/%d/%Y %k", tz = "America/New_York")
      }
      else if (Time_Zone == "Central Daylight Time" || Time_Zone == "Central Standard Time") {
        Data$Date_Formatted <- as.POSIXct(Data$Date, "%m/%d/%Y %k", tz = "America/Chicago")
        Data$Date_Formatted2 <- as.POSIXlt(Data$Date, "%m/%d/%Y %k", tz = "America/Chicago")
      }
    }

Я не уверен, в чем разница между POSIXct и POSIXlt и нашел другой поток, который использовал оба ... так я и сделал ... Я не думаю, что Однако необходимо.

Кажется, что 12-часовое решение работает нормально, но 24-часовой формат все равно должен быть неправильным.

1 Ответ

0 голосов
/ 18 января 2020

Попробуйте lubridate, это очень надежный пакет для дат и времени:

library(lubridate)

ymd_hms(c("2019-01-20 10:25:00 PM", "2019-01-20 22:25:00"))
[1] "2019-01-20 22:25:00 UTC" "2019-01-20 22:25:00 UTC"

Проверьте ?ymd_hms для получения дополнительных параметров.

...