Попытка заставить mutate_at работать с strptime - PullRequest
1 голос
/ 25 марта 2019

У меня есть следующий фрейм данных:

df = data.frame(date = "23-12-09 22:52")

Этот код отлично работает:

strptime(df$date, "%d-%m-%y %H:%M")
# [1] "2009-12-23 22:52:00 CET"`

Но если я попробую использовать mutate_at, я получу ошибку:

dplyr::mutate_at(df, vars(date), strptime, "%d-%m-%y %H:%M")

Ошибка в mutate_impl (.data, точки): Столбец «дата» относится к неподдерживаемому классу POSIXlt`

Я хотел бы понять, почему мое утверждение mutate_at не работает. (Мне не нужно альтернативное решение. Этот вопрос носит чисто образовательный характер.)

1 Ответ

1 голос
/ 25 марта 2019

После применения strptime класс date столбец становится POSIXlt

class(strptime(df$date, "%d-%m-%y %H:%M"))
#[1] "POSIXlt" "POSIXt" 

dplyr не хочет обрабатывать объекты класса POSIXlt по причинам, указанным здесь .

Так что вам нужно иметь объекты другого класса в цепочке dplyr. Может быть персонаж

dplyr::mutate_at(df, vars(date), ~ as.character(strptime(., "%d-%m-%y %H:%M")))

#                 date
#1 2009-12-23 22:52:00

Или POSIXct объект

dplyr::mutate_at(df, vars(date), ~ as.POSIXct(., format = "%d-%m-%y %H:%M"))

#                date
#1 2009-12-23 22:52:00
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...