You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

谷歌数据分析Bellabeats项目:拆分Weight数据集日期时间列遇异常

解决Weight数据集Date列拆分问题

你的代码核心问题有两个:

  1. 直接覆盖了原Date列:第一行weight$Date= as.POSIXct(...)把原本的字符串格式日期时间替换成了POSIXct时间戳,所以你觉得原列“被删除”了。
  2. 格式字符串写错了:第一个%M是分钟,你应该用%m表示月份;另外时间部分的多余空格(比如%I: 里的空格、%M :%S中间的空格)会导致解析失败,生成NA值。

修复后的代码

情况1:保留原始Date列(字符串格式),新增date和time列

# 先把原Date列复制一份,避免被覆盖
weight$original_date <- weight$Date

# 正确解析日期时间(修正格式串)
weight$datetime <- as.POSIXct(weight$original_date, format = "%m/%d/%Y %I:%M:%S %p", tz = Sys.timezone())

# 拆分出日期和时间列
weight$time <- format(weight$datetime, format = "%H:%M:%S")
weight$date <- format(weight$datetime, format = "%m/%d/%Y")

情况2:不需要保留原始字符串列,只是想让Date列保留为时间戳,同时有拆分后的列

如果你只是觉得原列“消失”了,其实它只是变成了POSIXct类型,你可以调整代码,不覆盖原列,而是新建一个时间戳列:

# 新建datetime列存储解析后的时间戳,不碰原Date列
weight$datetime <- as.POSIXct(weight$Date, format = "%m/%d/%Y %I:%M:%S %p", tz = Sys.timezone())

# 拆分日期和时间
weight$time <- format(weight$datetime, format = "%H:%M:%S")
weight$date <- format(weight$datetime, format = "%m/%d/%Y")

关键说明

  • 格式串里的%m是月份(01-12),%M是分钟(00-59),别搞混;
  • 时间部分的分隔符要和原数据完全匹配,原数据是HH:MM:SS就写%I:%M:%S,别加多余空格;
  • 如果不确定原数据的格式,可以用str(weight$Date)查看,或者用lubridate包的parse_date_time函数自动识别格式,更省心:
library(lubridate)
weight$datetime <- parse_date_time(weight$Date, orders = "mdy IMS p")
weight$time <- format(weight$datetime, "%H:%M:%S")
weight$date <- format(weight$datetime, "%m/%d/%Y")

内容的提问来源于stack exchange,提问作者bacazach

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.16 06:01:18