R: Как мне преобразовать строку данных в объекты POSIXt? - PullRequest
1 голос
/ 19 февраля 2020

У меня есть датафрейм строк, представляющих время, например:

times <- structure(list(exp1 = c("17:19:04 \r", "17:28:53 \r", "17:38:44 \r"), 
                        exp2 = c("17:22:04 \r", "17:31:53 \r", "17:41:45 \r")), 
                        row.names = c(NA, 3L), class = "data.frame")

Если я запускаю strptime() на одном элементе моего фрейма данных times, он преобразует его в красивый объект POSIXt:

strptime(times[1,1], '%H:%M:%S')

[1] "2020-02-19 17:19:04 GMT"

Отлично, так что теперь я хотел бы преобразовать весь мой фрейм данных times в этот формат.

Я не могу найти решение, чтобы сделать это плавно.

Несколько вещей, которые я пробовал до сих пор:

strptime(times, '%H:%M:%S') # generates NA
strftime(times, '%H:%M:%S') # Error: do not know how to convert 'x' to class “POSIXlt”
apply(times, 2, function(x) strftime(x, '%H:%M:%S')) # Error: character string is not in a standard unambiguous format

Самое близкое, что я получил к тому, что Я хочу это:

apply(times, 2, function(x) strptime(x, '%H:%M:%S'))

Это создает грязный список. Я, вероятно, могу найти способ использовать его, но должен быть более простой способ?

1 Ответ

0 голосов
/ 19 февраля 2020

Вы можете использовать lapply.

times[] <- lapply(times, strptime, '%H:%M:%S')
#                  exp1                exp2
# 1 2020-02-19 17:19:04 2020-02-19 17:22:04
# 2 2020-02-19 17:28:53 2020-02-19 17:31:53
# 3 2020-02-19 17:38:44 2020-02-19 17:41:45

Примечание: apply также работает.

times[] <- apply(times, 2, function(x) strptime(x, '%H:%M:%S'))

Хитрость заключается в замене столбцов (в отличие от перезаписи фрейма данных списком) на [] <-, что в данном случае можно рассматривать как сокращенное для times[1:2] <- lapply(times[1:2], ·).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...