RStudio中使用mutate/as.Date报‘Object not found’错误求助
问题解决建议
核心问题:语法错误导致列无法识别
你代码里每行开头的多余+是错误根源——R在管道链换行时会自动显示+作为续行提示,但手动输入这个符号会破坏管道的上下文传递,导致dplyr无法从tripdata_combined中读取列,反而把started_at当成全局变量(全局环境里确实没有这个变量,所以exists("started_at")返回FALSE)。
修正后的代码
先去掉多余的+,同时注意日期解析格式(你的started_at是月/日/年 时分格式,必须指定format参数,否则as.Date会解析失败),另外可以把多个mutate合并成一个,提升效率:
# 先加载dplyr(如果未加载) library(dplyr) # 修正语法并正确解析日期 tripdata_combined <- tripdata_combined %>% mutate( # 先把started_at转成Date类型 started_at_dt = as.Date(started_at, format = "%m/%d/%Y %H:%M"), year = format(started_at_dt, "%Y"), month = format(started_at_dt, "%B"), date = format(started_at_dt, "%d"), day_of_week = format(started_at_dt, "%A"), # 计算骑行时长时,需先把ended_at也转成Date类型 ride_length = difftime(as.Date(ended_at, format = "%m/%d/%Y %H:%M"), started_at_dt, units = "mins") )
更简便的日期处理(推荐)
用lubridate包可以自动识别日期格式,无需手动编写规则:
library(dplyr) library(lubridate) tripdata_combined <- tripdata_combined %>% mutate( started_at_dt = mdy_hm(started_at), # 自动识别月/日/年 时分格式 ended_at_dt = mdy_hm(ended_at), year = year(started_at_dt), month = month(started_at_dt, label = TRUE, abbr = FALSE), # 直接获取月份全称 date = day(started_at_dt), day_of_week = wday(started_at_dt, label = TRUE, abbr = FALSE), # 直接获取星期全称 ride_length = difftime(ended_at_dt, started_at_dt, units = "mins") )
验证列存在的正确方式
不要用exists()(它检查的是全局环境变量),要检查数据框内的列,用:
# 检查tripdata_combined中是否包含started_at列 "started_at" %in% colnames(tripdata_combined)
内容的提问来源于stack exchange,提问作者Emily Garma
相关产品推荐
相关产品推荐

