【问题标题】:Cutting a time elapsed variable into manageable things将经过时间的变量切割成可管理的东西
【发布时间】:2015-05-20 20:53:22
【问题描述】:
flight_time
    11:42:00
    19:37:06
    18:11:17

我在处理数据集中的播放时间变量时遇到了问题。我似乎无法弄清楚如何让 R 将此值视为数字。

如果之前有人问过这个问题,我们深表歉意。

编辑:

好吧,鉴于下面发布的内容,我意识到有些事情我以前不知道/检查过。

首先这是一个因子变量。我通读了 lubridate 包文档,因为我想执行算术运算(如果这是正确的术语),我相信持续时间函数是正确的。

但是查看示例-我不完全确定将其应用于大型(ish)数据中的整个列的语法是什么。由于我有 4.5k 观察,我不确定如何应用它。我不需要过多的粒度 - 理想情况下,即使是几小时和几分钟也可以。

所以我想我希望我的代码看起来像:

从因子变量到字符串的转换> 从字符串到duration/as.numeric的转换。

【问题讨论】:

    标签: r


    【解决方案1】:

    试试这个代码:

    #dummy data with factors
    df <- data.frame(flight_time=c("11:42:00","19:37:06","18:11:17"))
    
    #add Seconds column
    df$Seconds <- 
      sapply(as.character(df$flight_time), function(i)
        sum(as.numeric(unlist(strsplit(i,":"))) * c(60^2,60,1)))
    
    #result
    df
    #   flight_time Seconds
    # 1    11:42:00   42120
    # 2    19:37:06   70626
    # 3    18:11:17   65477
    

    【讨论】:

    • 这只是返回来自res 的秒数作为数字。我假设@Anaryl 想要将整个字符串转换为数字。查看str(res)res@hourres@minuteres@.Data(秒)的总和,正确转换为恒定比例,将做他想做的事。我对 lubridate 不太熟悉,但我在 Hadley 的小插图中没有看到简单的方法。
    • 在第二个例子中,它应该是 (1, 1/60, 1/(60*60)) 或 (60, 1, 1/60) 或 (60*60, 60, 1 ), (60, 60, 60) 只是将所有内容(小时、分钟和秒)乘以 60。例如,18:11:17 应该是 65477 秒或 1091.28 分钟或 18.19 小时。与 rowSums 乘数相同。否则,它应该可以工作。
    • 这是一个整体还是第二个是独立代码 - 就在第一个任务中 - 我需要涵盖大约四千五万个观察结果 - 我是否正确假设我可以通过像 x 这样的子集
    • 如果有任何帮助,可以在这里找到数据集reddit.com/r/starcitizen/comments/36gomg/…
    • 对不起,如果我评论过度了。所以我必须将它应用于整个数据帧,这实际上不是问题,并且它添加了一个名为“flight_time_int”的新变量 - 以相同格式显示持续时间......但我认为它有效!让在确认之前我先玩一下
    猜你喜欢
    • 1970-01-01
    • 2020-02-18
    • 2017-06-18
    • 2022-11-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多