【问题标题】:Convert factor type time into number of minutes将因子类型时间转换为分钟数
【发布时间】:2015-10-04 21:34:37
【问题描述】:

我的数据集中有一列包含00:20:10 格式的时间。我有两个问题。首先,当我使用read.xlsx2() 将其导入R 时,此列将转换为因子类型。如何将其转换为时间类型? 其次,我想以分钟为单位计算每个人的总时间。

ID      Time
 1  00:10:00
 1  00:21:30
 2  00:30:10
 2  00:04:10

我想要的输出是:

ID Total.time
 1       31.5
 2       34.3

我之前没有处理过时间问题,我希望有人也能推荐一些包。

【问题讨论】:

    标签: r time


    【解决方案1】:

    您可以使用 chron 包中的times()Time 列转换为“times”类。然后aggregate() 对时间求和,按ID 列分组。第一个块将为我们提供结果中的实际时间。

    library(chron)
    
    df$Time <- times(df$Time)
    aggregate(list(Total.Time = df$Time), df[1], sum)
    #   ID Total.Time
    # 1  1   00:31:30
    # 2  2   00:34:20
    

    对于十进制输出,我们可以使用minutes()seconds(),同样来自chron

    aggregate(list(Total.Time = df$Time), df[1], function(x) {
        minutes(s <- sum(x)) + (seconds(s) / 60)
    })
    #   ID Total.Time
    # 1  1   31.50000
    # 2  2   34.33333
    

    此外,我们还可以使用 data.table 来提高效率。

    library(data.table)
    setDT(df)[, .(Total.Time = minutes(s <- sum(Time)) + (seconds(s) / 60)), by = ID]
    #    ID Total.Time
    # 1:  1   31.50000
    # 2:  2   34.33333
    

    数据:

    df <- structure(list(ID = c(1L, 1L, 2L, 2L), Time = structure(c(2L, 
    3L, 4L, 1L), .Label = c("00:04:10", "00:10:00", "00:21:30", "00:30:10"
    ), class = "factor")), .Names = c("ID", "Time"), class = "data.frame", row.names = c(NA, 
    -4L))
    

    【讨论】:

    • 非常感谢!明白了!@Richard
    • 如果我的时间像“112:23:09”,一小时超过24小时怎么办。当我使用时间 ( ) 时,我收到警告消息:“time out of day entry”。那么我应该将它们转换成数据,然后是分钟。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多