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

Dem*_*emo 2 time r

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

ID      Time
 1  00:10:00
 1  00:21:30
 2  00:30:10
 2  00:04:10
Run Code Online (Sandbox Code Playgroud)

我想要的输出是:

ID Total.time
 1       31.5
 2       34.3
Run Code Online (Sandbox Code Playgroud)

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

Ric*_*ven 5

你可以使用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
Run Code Online (Sandbox Code Playgroud)

对于小数输出,我们可以使用minutes()seconds()从,还代上.

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
Run Code Online (Sandbox Code Playgroud)

此外,我们还可以使用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
Run Code Online (Sandbox Code Playgroud)

数据:

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))
Run Code Online (Sandbox Code Playgroud)