【问题标题】:How to convert character into time duration?如何将字符转换为持续时间?
【发布时间】:2019-01-01 23:00:32
【问题描述】:

我想计算 Excel 电子表格收集的不同类型活动所花费的时间。

读取文件后,所有时间值都是字符类型,我无法转换为 HH:MM:SS。

数据框示例:

df <- data.frame(id=c(1,2,3,4,5,6),
             name=c('Sean','Bob','Dylan',"Barbara","Louis","Marine"),
             Swimming=c("00:00:00","00:30:22","00:42:22",
                        "00:50:53","00:20:11","00:30:12"),
             Skating=c("00:10:23","00:10:22","00:02:22",
                       "00:20:53","00:30:11","00:10:12"))

我需要将 Swimming 和 Skating 列的 CHR 值转换为持续时间来操作它们。例如,我想知道他们都花多少小时进行游泳活动。

我试过了:

润滑包(parse_date_time)函数:

parse_date_time(df[3:4],"HMS")

给我这个警告:

警告信息:
所有格式都无法解析。未找到格式。

如何以我可以操作的方式转换这些数据?

【问题讨论】:

  • 我认为这是一个有点误导性的错误,因为运行 parse_date_time(df$Swimming,"HMS") 确实有效。也就是说,我推荐hms(df$Swimming),因为你不希望这些时间在UTC
  • 或者在基本 R 功能中,您可以执行 - as.difftime(as.character(df$Swimming)),默认情况下会查找 %H:%M:%S 格式时间。解析成完整的日期/时间对象将不允许您对这些值求和 - 我认为 lubridate 等价物是“持续时间” - 请参阅resources.rstudio.com/the-essentials-of-data-science/…
  • @EmilyKothe - as.duration(hms(df$Swimming)) 我认为更可取。 sum(hms(df$Swimming)) 给出了一个非常奇怪的结果,而 sum(as.duration(hms(df$Swimming))) 给出了一个更符合预期的结果。
  • @thelatemail 当我尝试这样做时sum(hms(df$Swimming)) 我收到以下错误消息:“错误:所有参数必须是数字或 NA”
  • @tmangueira - 根据帖子和上面的代码使用您的确切 df 示例?这一切都对我有用。

标签: r


【解决方案1】:

我刚刚成功测试了@thelatemail 建议。它工作得很好。然后我只是转换为小时。

只是将您的@thelatemail 回复复制到此处,以供那些感到迷茫和忽视 cmets 的人使用:

as.duration(hms(df$Swimming)) 我认为更可取。 sum(hms(df$Swimming)) 给出了一个非常奇怪的结果,而 sum(as.duration(hms(df$Swimming))) 给出了一个更符合预期的结果。

【讨论】:

  • @user438383 我想我不必在这样的虚拟空间中赢得声誉。如果可以避免使用较小的感谢信,那根本不是我的职责。再见。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-01-05
  • 2016-07-17
  • 2016-02-03
  • 1970-01-01
  • 1970-01-01
  • 2020-09-05
相关资源
最近更新 更多