将“小时”和“分钟”列合并到一列中,以R表示时差
亲爱的R社区成员:, 我有一个12小时格式的数据集,设计如下:将“小时”和“分钟”列合并到一列中,以R表示时差,r,lubridate,R,Lubridate,亲爱的R社区成员:, 我有一个12小时格式的数据集,设计如下: departurehour departureminute arrivalhour arrivalminute 4 30 4 50 9 10 9 30 8 10 8 18
departurehour departureminute arrivalhour arrivalminute
4 30 4 50
9 10 9 30
8 10 8 18
我想得到以下通勤时间的输出(分钟格式)。通勤时间=到达时间-离开时间
Departuretime Arrivaltime Commutetime
4:30 4:50 20
9:10 9:30 20
8:10 8:18 8
我将非常感谢你及时的帮助。
事先非常感谢 我们可以将
departurehour
和departureminute
组合起来,以获得departuretime
,并对arrivaltime
执行相同的操作。使用difftime
从arrivaltime
和departuretime
中减去值,以分钟为单位计算时差
library(dplyr)
library(tidyr)
df %>%
unite(departuretime, departurehour, departureminute, sep = ":") %>%
unite(arrivaltime, arrivalhour, arrivalminute, sep = ":") %>%
mutate(Commutetime = as.numeric(difftime(
as.POSIXct(sprintf("%04s", arrivaltime), format = "%H:%M"),
as.POSIXct(sprintf("%04s", departuretime), format = "%H:%M"),
units = "mins")))
# departuretime arrivaltime Commutetime
#1 4:30 4:50 20
#2 9:10 9:30 20
#3 8:10 8:18 8
我们可以组合
departurehour
和departureminute
以获得departuretime
,并对arrivaltime
执行相同的操作。使用difftime
从arrivaltime
和departuretime
中减去值,以分钟为单位计算时差
library(dplyr)
library(tidyr)
df %>%
unite(departuretime, departurehour, departureminute, sep = ":") %>%
unite(arrivaltime, arrivalhour, arrivalminute, sep = ":") %>%
mutate(Commutetime = as.numeric(difftime(
as.POSIXct(sprintf("%04s", arrivaltime), format = "%H:%M"),
as.POSIXct(sprintf("%04s", departuretime), format = "%H:%M"),
units = "mins")))
# departuretime arrivaltime Commutetime
#1 4:30 4:50 20
#2 9:10 9:30 20
#3 8:10 8:18 8
使用
dplyr
:
df %>%
mutate(ArrivalTime = paste0(arrivalhour,":",arrivalminute),
DepartTime = paste0(departurehour,":",departureminute)) %>%
select(ends_with("Time")) %>%
mutate(DepartTime = strptime(DepartTime, format="%H:%M"),
ArrivalTime = strptime(ArrivalTime, format="%H:%M"),
Total =difftime(ArrivalTime, DepartTime))
ArrivalTime DepartTime Total
1 2020-04-16 04:50:00 2020-04-16 04:30:00 20 mins
2 2020-04-16 09:30:00 2020-04-16 09:10:00 20 mins
3 2020-04-16 08:18:00 2020-04-16 08:10:00 8 mins
注意
这需要一些日期组件才能使difftime
正常工作
数据
df <- structure(list(departurehour = c(4L, 9L, 8L), departureminute = c(30L,
10L, 10L), arrivalhour = c(4L, 9L, 8L), arrivalminute = c(50L,
30L, 18L)), class = "data.frame", row.names = c(NA, -3L))
df带dplyr
:
df %>%
mutate(ArrivalTime = paste0(arrivalhour,":",arrivalminute),
DepartTime = paste0(departurehour,":",departureminute)) %>%
select(ends_with("Time")) %>%
mutate(DepartTime = strptime(DepartTime, format="%H:%M"),
ArrivalTime = strptime(ArrivalTime, format="%H:%M"),
Total =difftime(ArrivalTime, DepartTime))
ArrivalTime DepartTime Total
1 2020-04-16 04:50:00 2020-04-16 04:30:00 20 mins
2 2020-04-16 09:30:00 2020-04-16 09:10:00 20 mins
3 2020-04-16 08:18:00 2020-04-16 08:10:00 8 mins
注意
这需要一些日期组件才能使difftime
正常工作
数据
df <- structure(list(departurehour = c(4L, 9L, 8L), departureminute = c(30L,
10L, 10L), arrivalhour = c(4L, 9L, 8L), arrivalminute = c(50L,
30L, 18L)), class = "data.frame", row.names = c(NA, -3L))
df这里有一个带有数据的选项。表
library(data.table)
setDT(df1)[, .(departuretime = sprintf("%02d:%02d", departurehour,
departureminute), arrivaltime = sprintf("%02d:%02d", arrivalhour,
arrivalminute))][, CommuteTime :=
as.numeric(as.ITime(arrivaltime) - as.ITime(departuretime))/60][]
# departuretime arrivaltime CommuteTime
#1: 04:30 04:50 20
#2: 09:10 09:30 20
#3: 08:10 08:18 8
数据
df1这里有一个带有data.table的选项
library(data.table)
setDT(df1)[, .(departuretime = sprintf("%02d:%02d", departurehour,
departureminute), arrivaltime = sprintf("%02d:%02d", arrivalhour,
arrivalminute))][, CommuteTime :=
as.numeric(as.ITime(arrivaltime) - as.ITime(departuretime))/60][]
# departuretime arrivaltime CommuteTime
#1: 04:30 04:50 20
#2: 09:10 09:30 20
#3: 08:10 08:18 8
数据
df1