在R中使用lubridate将chr类型(mm/dd/yyyy)转换为日期遇错求助
解决chr类型日期列转日期类型的错误问题
错误原因分析
- 第一个错误(
do not know how to convert '.' to class "Date"):使用管道符%>%时,.代表整个数据框,而as.Date()/as_date()需要的是字符向量,直接写date没有正确指向数据框里的列,导致函数试图把整个数据框转成日期,自然报错。 - 第二个错误(
cannot coerce type 'closure' to vector of type 'character'):你的列名date和lubridate包中的date()函数重名了,R把date识别成了函数(closure类型),而不是数据框的列,所以无法转成字符向量。
可行解决办法
方法1:直接调用函数处理(不用管道)
跳过管道,直接提取数据框的列传入函数:# 使用lubridate的mdy df$date <- mdy(df$date) # 或者用base R的as.Date,指定格式 df$date <- as.Date(df$date, format = "%m/%d/%Y")方法2:结合dplyr的mutate使用管道
用mutate()来修改列,同时如果列名和函数重名,用反引号包裹列名明确指向数据列:library(dplyr) library(lubridate) # 常规写法(如果列名无冲突) df <- df %>% mutate(date = mdy(date)) # 列名和函数重名时,用反引号包裹列名 df <- df %>% mutate(date = mdy(`date`))方法3:重命名列避免冲突
先把date列改个名字,彻底避免和函数名冲突:df <- df %>% rename(raw_date = date) %>% mutate(raw_date = mdy(raw_date))
内容的提问来源于stack exchange,提问作者Lillian Welsh
相关产品推荐
相关产品推荐

