我的数据集中有一列包含格式的时间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)
我以前没有处理时间问题,我希望有人也会推荐一些包.
你可以使用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)
| 归档时间: |
|
| 查看次数: |
566 次 |
| 最近记录: |