我有以下数据框:
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
语句不起作用。 (我不需要替代解决方案。这个问题纯粹是教育性的。)
答案 0 :(得分:1)
应用strptime
列的date
类后,将变为POSIXlt
class(strptime(df$date, "%d-%m-%y %H:%M"))
#[1] "POSIXlt" "POSIXt"
dplyr
不想处理类POSIXlt
的对象,原因是提到了here。
因此,您需要在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