R语言col_datetime/as.POSIXct转日期值全为NA的问题求助
日期时间字符串转POSIXct后全为NA的问题
操作流程与问题
- 加载数据:列出指定路径下的CSV文件,读取为数据框列表后合并
- 转换尝试:使用
col_datetime(format = "%m/%d/%y %H:%M")和as.POSIXct()函数,将格式为%m/%d/%y %H:%M的日期字符串转为datetime类型 - 异常情况:列的数据类型显示为POSIXct,但所有日期值均为NA
- 已做排查:多次验证格式匹配、确认源数据无隐藏字符,尝试转换为Date类型,问题仍未解决
加载数据代码
cdf <- list.files(path = '/cloud/project/cap1/Capstone-dnb', pattern = '\\.csv$', full.names = TRUE) list_of_dfs <- lapply(cdf, read.csv) combined_df <- do.call(rbind, list_of_dfs) str(combined_df)
数据示例(dput(head(cdf))输出)
> dput(head(cdf)) structure(list(ride_id = c("1068AB1B8F12FE23", "4DE50A4FC7687A0D", "1C78B5F337CBFC93", "D231CE7990A3AA52", "2.30E+15", "EB21BB139ABF6174" ), rideable_type = c("docked_bike", "docked_bike", "docked_bike", "docked_bike", "docked_bike", "docked_bike"), started_at = structure(c(NA_real_, NA_real_, NA_real_, NA_real_, NA_real_, NA_real_), tzone = "", class = c("POSIXct", "POSIXt")), ended_at = structure(c(NA_real_, NA_real_, NA_real_, NA_real_, NA_real_, NA_real_), tzone = "UTC", class = c("POSIXct", "POSIXt")), start_station_name = c("Sheffield Ave & Wellington Ave", "Daley Center Plaza", "Sheridan Rd & Irving Park Rd", "Delano Ct & Roosevelt Rd", "Clark St & Leland Ave", "Clark St & Leland Ave"), start_station_id = c(115, 81, 240, 626, 326, 326), end_station_name = c("Ashland Ave & Belle Plaine Ave", "Dearborn St & Van Buren St", "Broadway & Sheridan Rd", "Wabash Ave & Roosevelt Rd", "Southport Ave & Irving Park Rd", "Clark St & Bryn Mawr Ave"), end_station_id = c(246, 624, 256, 59, 318, 460), start_lat = c(41.9363, 41.8842, 41.9542, 41.8675, 41.9671, 41.9671), start_lng = c(-87.6527, -87.6296, -87.6544, -87.6322, -87.6674, -87.6674), end_lat = c(41.9561, 41.8763, 41.9528, 41.8672, 41.9542, 41.9836), end_lng = c(-87.6688, -87.6292, -87.65, -87.626, -87.6644, -87.6692), member_casual = c("casual", "member", "member", "member", "member", "member"), ride_length = structure(c(46800, 14400, 7200, 7200, 25200, 28800), class = c("hms", "difftime" ), units = "secs"), day_of_week = c(4, 4, 4, 4, 4, 4)), row.names = c(NA, -6L), class = c("tbl_df", "tbl", "data.frame")) >
更新补充(7/6 8:50)
单独尝试过以下两行代码,print(cdf)显示started_at列数据类型为POSIXct,但spec(cdf)显示类型不符合预期:
cdf$started_at <- col_datetime(cdf$started_at, format = "%m/%d/%y %H:%M") cdf$started_at <- as.POSIXct(cdf$started_at, format = "%m/%d/%y %H:%M")
已确认col_datetime的格式参数与源数据日期字符串格式完全匹配,也尝试过转换为Date类型,排除了源数据存在隐藏字符的可能,但转换后日期值仍然全部为NA。
内容的提问来源于stack exchange,提问作者Daniel Boggs
相关产品推荐
相关产品推荐

