如何在R中更新数据框日期列格式并保留数据框结构
解决R中日期列转换后数据框未更新的问题
问题场景
数据集包含两个字段:
- Date:字符型字段,格式为
mm/dd/yyyy h:mm:ss AM/PM - X:数值型字段,为PSI单位的压力表读数
样本数据:
| Date | X |
|---|---|
| 7/13/2022 5:15:59 AM | 0.00 |
| 7/13/2022 5:20:00 AM | 1.50 |
| 7/15/2022 1:00:00 PM | 4.00 |
执行as.POSIXct(df$Date, format="%m/%d/%Y %I:%M:%S %p", tz="UTC")时,代码输出正确但数据框未发生变化;尝试错误代码:
df$[df$Date] <- as.POSIXct(df$Date, format="%m/%d/%Y %I:%M:%S %p", tz="UTC")
触发报错:
Warning: NAs produced by integer overflowWarning: NAs produced by integer overflowError in if (m < n * p && (m == 0L || (n * p)%%m)) stop(sprintf(ngettext(m, :
missing value where TRUE/FALSE needed
解决方案
正确的列赋值方式
要更新日期列或新增转换后的列,需使用标准的列赋值语法:
- 直接更新原Date列
覆盖原有字符型数据,将其转换为POSIXct类型:
df$Date <- as.POSIXct(df$Date, format="%m/%d/%Y %I:%M:%S %p", tz="UTC")
若需要将显示格式固定为不带AM/PM的24小时制字符型,可搭配format()函数:
df$Date <- format(as.POSIXct(df$Date, format="%m/%d/%Y %I:%M:%S %p", tz="UTC"), "%m/%d/%Y %H:%M:%S")
- 新增New_Date列(保留原Date列)
如果要保留原始日期列,新增转换后的列:
df$New_Date <- format(as.POSIXct(df$Date, format="%m/%d/%Y %I:%M:%S %p", tz="UTC"), "%m/%d/%Y %H:%M:%S")
执行后得到符合期望的结果:
| Date | X | New_Date |
|---|---|---|
| 7/13/2022 5:15:59 AM | 0.00 | 7/13/2022 05:15:59 |
| 7/13/2022 5:20:00 AM | 1.50 | 7/13/2022 05:20:00 |
| 7/15/2022 1:00:00 PM | 4.00 | 7/15/2022 13:00:00 |
错误代码原因
df$[df$Date]是语法错误:$运算符后必须紧跟列名,而你用[df$Date]试图将Date列的字符值作为列名索引,导致R触发类型不匹配、数值溢出等问题。
内容的提问来源于stack exchange,提问作者lilshortstop
相关产品推荐
相关产品推荐

