将因子类型时间转换为分钟数

时间:2015-10-04 21:34:38

标签: r time

我的数据集中有一列包含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

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

1 个答案:

答案 0 :(得分:5)

您可以使用 chron 包中的times()Time列转换为"次"类。然后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))