R语言使用chron将字符型时间转为时间格式并整合到数据集问题
问题解决方案
错误原因
- 管道
%>%会将前序操作的输出结果作为下一个函数的第一个默认参数,你原代码末尾直接写chron(times=f1$ymd_hms(Timestamp)),相当于把前序得到的10078行4列的dataframe传入了chron的第一个参数dates,和你传入的times参数维度完全不匹配,自然报错。 - 管道操作中直接修改列时不需要加原数据框前缀
f1$,mutate会自动识别当前管道内的数据集列,用f1$反而会调用未经过前序修改的原始数据集列,容易出现逻辑错误。 - 额外的
transform调用没有必要,dplyr的mutate本身就可以完成列类型修改的操作,写法更统一。
正确实现代码
library(dplyr) library(chron) time <- f1 %>% mutate( # 转换时间为HH:MM:SS字符格式 `ymd_hms(Timestamp)` = strftime(`ymd_hms(Timestamp)`, tz="GMT", format = "%H:%M:%S"), # 修改SpotPrice为数值格式 SpotPrice = as.numeric(SpotPrice), # 直接将字符时间转换为chron的times格式,保留在数据框列中 `ymd_hms(Timestamp)` = chron(times = `ymd_hms(Timestamp)`) )
执行上述代码后调用str(time)查看数据集结构,即可看到ymd_hms(Timestamp)列已经为times格式,无需单独生成向量再合并。
内容的提问来源于stack exchange,提问作者NIrbhay Mathur
相关产品推荐
相关产品推荐

