试图使mutate_at与strptime一起使用

时间:2019-03-25 02:12:23

标签: r dplyr

我有以下数据框:

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 个答案:

答案 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