как предотвратить as.POSIXct от упрощения времени [дубликат]

Можно попытаться сохранить его просто, а не усложнять:

  • Использовать синтаксический анализ с использованием векторизованной даты
R> as.Date( c("2010-04-06", "foo", "2010-04-08") )
[1] "2010-04-06" NA           "2010-04-08"

Вы можете тривиально обернуть na.omit() или что угодно вокруг него. Или найдите индекс NA и выберете соответственно из исходного вектора или воспользуйтесь дополнением к NA, чтобы найти разобранные даты, или, или, или. Это все уже здесь.

  • Вы можете сделать свой testFunction() что-то. Используйте тест там - если возвращаемая (разобранная) дата NA, сделайте что-то.
  • Добавьте блок tryCatch() или try() в синтаксический анализ даты.

Все вещи немного странны, поскольку вы переходите от структуры данных одного типа (вектор символов) к чему-то еще, но вы не можете легко смешивать типы, если не сохранить их в типе list. Возможно, вам нужно переосмыслить это.

5
задан 李哲源 28 September 2016 в 20:05
поделиться

5 ответов

Нет, вы даете as.POSIXct неправильный формат ...

Как насчет использования формата

datetimes = as.POSIXct(c("2016-04-02 10:33:45 COT", "2016-04-02 22:19:24 COT" ,"2016-04-09 17:47:13 COT", "2016-04-13 16:56:23 COT")    
format(datetimes,format='%Y%m%d %H:%M')

[1] "20160402 10:33" "20160402 22:19" "20160409 17:47" "20160413 16:56"
3
ответ дан Wistar 18 August 2018 в 04:35
поделиться
  • 1
    Кажется, что в первой строке отсутствует правая скобка. Не очень, очень полезно! – EntryLevelR 5 January 2018 в 22:28

Если вы хотите округлить дату до минут, вы можете сделать это:

   x <- as.POSIXlt(c("2016-04-02 10:33:45 COT"))
   res <-as.POSIXlt(floor(as.double(x) / 60) * 60, origin = '1970-01-01')
   res
   #  "2016-04-02 10:33:00 BST"
0
ответ дан Bulat 18 August 2018 в 04:35
поделиться

вы можете использовать round.POSIXt:

round(Sys.time(), units = "mins")
#"2017-01-30 11:20:00 CET"
1
ответ дан fc9.30 18 August 2018 в 04:35
поделиться
  • 1
    Если вы используете эту функцию для управления файлом data.frame, вам нужно добавить as.POSIXct, чтобы удалить структуру списка – fc9.30 30 January 2017 в 11:31

Это то, что у вас есть:

x <- structure(c(1459589625, 1459631964, 1460220433, 1460562983),
     class = c("POSIXct", "POSIXt"), tzone = "")

Это то, что вы хотите:

x <- format(as.POSIXct(x), "%d-%m-%Y %H:%M")
x

[1] "02-04-2016 15:03" "03-04-2016 02:49" "09-04-2016 22:17" "13-04-2016 21:26"
0
ответ дан Manoj Kumar 18 August 2018 в 04:35
поделиться

Просто используйте подстроку:

datetimes <- c("2016-04-02 10:33:45 COT", "2016-04-02 22:19:24 COT" ,
               "2016-04-09 17:47:13 COT", "2016-04-13 16:56:23 COT")

as.POSIXct(substring(datetimes, 1, nchar(datetimes[1])-7))   

#[1] "2016-04-02 10:33:00 IST" "2016-04-02 22:19:00 IST" 
#    "2016-04-09 17:47:00 IST" "2016-04-13 16:56:00 IST"

# without timezone
format(substring(datetimes, 1, nchar(datetimes[1])-7), 
                 format='%Y-%m-%d %H:%M:%S', usetz = FALSE)
#[1] "2016-04-02 10:33" "2016-04-02 22:19" "2016-04-09 17:47" "2016-04-13 16:56"
0
ответ дан Sandipan Dey 18 August 2018 в 04:35
поделиться
  • 1
    Показанная строка часового пояса не вызывает доверия. – Matthew Lundberg 28 September 2016 в 20:36
  • 2
    ok обновлено согласно вашему требованию – Sandipan Dey 28 September 2016 в 20:41
Другие вопросы по тегам:

Похожие вопросы: