如何将小时:分钟:秒转换为R中的十进制数

如何将小时:分钟:秒转换为R中的十进制数,r,datetime,posixct,R,Datetime,Posixct,根据我最近的问题 我想将一列转换为date格式的data.frame,转换为十进制数。但是,我想找到另一种方法,但使用POSIXct的秒数。我们可以将这个向量乘以c(1,1/60,1/3600)例如02:20:00将变成2。333333我可以把它计算到我的数据中吗 # A tibble: 10 x 3 trip_id start_time end_time <int> <dttm> <

根据我最近的问题

我想将一列转换为date格式的data.frame,转换为十进制数。但是,我想找到另一种方法,但使用POSIXct的秒数。我们可以将这个向量乘以
c(1,1/60,1/3600)
例如
02:20:00
将变成
2。333333
我可以把它计算到我的数据中吗

# A tibble: 10 x 3
   trip_id start_time          end_time           
     <int> <dttm>              <dttm>             
 1       1 2020-10-05 11:11:36 2020-10-05 12:12:54
 2       2 2020-10-05 16:09:16 2020-10-05 20:00:42
 3       3 2020-10-05 09:16:33 2020-10-05 11:16:27
 4       4 2020-10-05 14:16:38 2020-10-05 14:37:38
 5       5 2020-10-05 13:08:16 2020-10-05 13:13:16
 6       6 2020-10-05 11:02:23 2020-10-05 13:04:16
 7       7 2020-10-05 13:15:19 2020-10-05 15:54:19
 8   56562 2020-10-09 11:05:25 2020-10-09 13:37:44
 9   56563 2020-10-09 14:11:30 2020-10-09 14:12:30
10   56564 2020-10-09 16:00:40 2020-10-09 16:46:58
#一个tible:10 x 3
行程id开始时间结束时间
1       1 2020-10-05 11:11:36 2020-10-05 12:12:54
2       2 2020-10-05 16:09:16 2020-10-05 20:00:42
3       3 2020-10-05 09:16:33 2020-10-05 11:16:27
4       4 2020-10-05 14:16:38 2020-10-05 14:37:38
5       5 2020-10-05 13:08:16 2020-10-05 13:13:16
6       6 2020-10-05 11:02:23 2020-10-05 13:04:16
7       7 2020-10-05 13:15:19 2020-10-05 15:54:19
8   56562 2020-10-09 11:05:25 2020-10-09 13:37:44
9   56563 2020-10-09 14:11:30 2020-10-09 14:12:30
10   56564 2020-10-09 16:00:40 2020-10-09 16:46:58

data我不确定我是否完全满足了你的数学要求,但这对你有用吗

library(dplyr)
data %>% 
   mutate(dec = as.numeric(strftime(start_time, format = '%H', tz = 'UTC')) * 1  
                as.numeric(strftime(start_time, format = '%M', tz = 'UTC'))/60 + 
                as.numeric(strftime(start_time, format = '%H', tz = 'UTC'))/3600)
# A tibble: 10 x 4
   trip_id start_time          end_time              dec
     <int> <dttm>              <dttm>              <dbl>
 1       1 2020-10-05 11:11:36 2020-10-05 12:12:54 11.2 
 2       2 2020-10-05 16:09:16 2020-10-05 20:00:42 16.2 
 3       3 2020-10-05 09:16:33 2020-10-05 11:16:27  9.27
 4       4 2020-10-05 14:16:38 2020-10-05 14:37:38 14.3 
 5       5 2020-10-05 13:08:16 2020-10-05 13:13:16 13.1 
 6       6 2020-10-05 11:02:23 2020-10-05 13:04:16 11.0 
 7       7 2020-10-05 13:15:19 2020-10-05 15:54:19 13.3 
 8   56562 2020-10-09 11:05:25 2020-10-09 13:37:44 11.1 
 9   56563 2020-10-09 14:11:30 2020-10-09 14:12:30 14.2 
10   56564 2020-10-09 16:00:40 2020-10-09 16:46:58 16.0 
库(dplyr)
数据%>%
变异(dec=as.numeric(strftime(开始时间,格式='%H',tz='UTC'))*1
as.numeric(strftime(开始时间,格式='%M',tz='UTC'))/60+
as.numeric(strftime(开始时间,格式='%H',tz='UTC'))/3600)
#一个tibble:10x4
行程id开始时间结束时间12月
1       1 2020-10-05 11:11:36 2020-10-05 12:12:54 11.2 
2       2 2020-10-05 16:09:16 2020-10-05 20:00:42 16.2 
3       3 2020-10-05 09:16:33 2020-10-05 11:16:27  9.27
4       4 2020-10-05 14:16:38 2020-10-05 14:37:38 14.3 
5       5 2020-10-05 13:08:16 2020-10-05 13:13:16 13.1 
6       6 2020-10-05 11:02:23 2020-10-05 13:04:16 11.0 
7       7 2020-10-05 13:15:19 2020-10-05 15:54:19 13.3 
8   56562 2020-10-09 11:05:25 2020-10-09 13:37:44 11.1 
9   56563 2020-10-09 14:11:30 2020-10-09 14:12:30 14.2 
10   56564 2020-10-09 16:00:40 2020-10-09 16:46:58 16.0 

我不确定我是否完全满足了你的数学要求,但这对你有用吗

library(dplyr)
data %>% 
   mutate(dec = as.numeric(strftime(start_time, format = '%H', tz = 'UTC')) * 1  
                as.numeric(strftime(start_time, format = '%M', tz = 'UTC'))/60 + 
                as.numeric(strftime(start_time, format = '%H', tz = 'UTC'))/3600)
# A tibble: 10 x 4
   trip_id start_time          end_time              dec
     <int> <dttm>              <dttm>              <dbl>
 1       1 2020-10-05 11:11:36 2020-10-05 12:12:54 11.2 
 2       2 2020-10-05 16:09:16 2020-10-05 20:00:42 16.2 
 3       3 2020-10-05 09:16:33 2020-10-05 11:16:27  9.27
 4       4 2020-10-05 14:16:38 2020-10-05 14:37:38 14.3 
 5       5 2020-10-05 13:08:16 2020-10-05 13:13:16 13.1 
 6       6 2020-10-05 11:02:23 2020-10-05 13:04:16 11.0 
 7       7 2020-10-05 13:15:19 2020-10-05 15:54:19 13.3 
 8   56562 2020-10-09 11:05:25 2020-10-09 13:37:44 11.1 
 9   56563 2020-10-09 14:11:30 2020-10-09 14:12:30 14.2 
10   56564 2020-10-09 16:00:40 2020-10-09 16:46:58 16.0 
库(dplyr)
数据%>%
变异(dec=as.numeric(strftime(开始时间,格式='%H',tz='UTC'))*1
as.numeric(strftime(开始时间,格式='%M',tz='UTC'))/60+
as.numeric(strftime(开始时间,格式='%H',tz='UTC'))/3600)
#一个tibble:10x4
行程id开始时间结束时间12月
1       1 2020-10-05 11:11:36 2020-10-05 12:12:54 11.2 
2       2 2020-10-05 16:09:16 2020-10-05 20:00:42 16.2 
3       3 2020-10-05 09:16:33 2020-10-05 11:16:27  9.27
4       4 2020-10-05 14:16:38 2020-10-05 14:37:38 14.3 
5       5 2020-10-05 13:08:16 2020-10-05 13:13:16 13.1 
6       6 2020-10-05 11:02:23 2020-10-05 13:04:16 11.0 
7       7 2020-10-05 13:15:19 2020-10-05 15:54:19 13.3 
8   56562 2020-10-09 11:05:25 2020-10-09 13:37:44 11.1 
9   56563 2020-10-09 14:11:30 2020-10-09 14:12:30 14.2 
10   56564 2020-10-09 16:00:40 2020-10-09 16:46:58 16.0 
使用R基

df <- read.csv(text ="start_time    end_time
05/10/2020 11:11:36 05/10/2020 12:12:54
05/10/2020 16:09:16 05/10/2020 20:00:42
05/10/2020 09:16:33 05/10/2020 11:16:27
05/10/2020 14:16:38 05/10/2020 14:37:38
05/10/2020 13:08:16 05/10/2020 13:13:16
05/10/2020 11:02:23 05/10/2020 13:04:16
05/10/2020 13:15:19 05/10/2020 15:54:19
09/10/2020 11:05:25 09/10/2020 13:37:44
09/10/2020 14:11:30 09/10/2020 14:12:30
09/10/2020 16:00:40 09/10/2020 16:46:58
", sep="\t" )


df$test <- lapply(str_split(str_sub(df$start_time,12), ":"),  
                  function(x) sum(as.numeric(unlist(x)) * c(1,1/60, 1/3600)))
df


            start_time            end_time     test
1  05/10/2020 11:11:36 05/10/2020 12:12:54 11.19333
2  05/10/2020 16:09:16 05/10/2020 20:00:42 16.15444
3  05/10/2020 09:16:33 05/10/2020 11:16:27 9.275833
4  05/10/2020 14:16:38 05/10/2020 14:37:38 14.27722
5  05/10/2020 13:08:16 05/10/2020 13:13:16 13.13778
6  05/10/2020 11:02:23 05/10/2020 13:04:16 11.03972
7  05/10/2020 13:15:19 05/10/2020 15:54:19 13.25528
8  09/10/2020 11:05:25 09/10/2020 13:37:44 11.09028
9  09/10/2020 14:11:30 09/10/2020 14:12:30 14.19167
10 09/10/2020 16:00:40 09/10/2020 16:46:58 16.01111
df使用R基

df <- read.csv(text ="start_time    end_time
05/10/2020 11:11:36 05/10/2020 12:12:54
05/10/2020 16:09:16 05/10/2020 20:00:42
05/10/2020 09:16:33 05/10/2020 11:16:27
05/10/2020 14:16:38 05/10/2020 14:37:38
05/10/2020 13:08:16 05/10/2020 13:13:16
05/10/2020 11:02:23 05/10/2020 13:04:16
05/10/2020 13:15:19 05/10/2020 15:54:19
09/10/2020 11:05:25 09/10/2020 13:37:44
09/10/2020 14:11:30 09/10/2020 14:12:30
09/10/2020 16:00:40 09/10/2020 16:46:58
", sep="\t" )


df$test <- lapply(str_split(str_sub(df$start_time,12), ":"),  
                  function(x) sum(as.numeric(unlist(x)) * c(1,1/60, 1/3600)))
df


            start_time            end_time     test
1  05/10/2020 11:11:36 05/10/2020 12:12:54 11.19333
2  05/10/2020 16:09:16 05/10/2020 20:00:42 16.15444
3  05/10/2020 09:16:33 05/10/2020 11:16:27 9.275833
4  05/10/2020 14:16:38 05/10/2020 14:37:38 14.27722
5  05/10/2020 13:08:16 05/10/2020 13:13:16 13.13778
6  05/10/2020 11:02:23 05/10/2020 13:04:16 11.03972
7  05/10/2020 13:15:19 05/10/2020 15:54:19 13.25528
8  09/10/2020 11:05:25 09/10/2020 13:37:44 11.09028
9  09/10/2020 14:11:30 09/10/2020 14:12:30 14.19167
10 09/10/2020 16:00:40 09/10/2020 16:46:58 16.01111

df通过从datetime对象中减去date对象,可以使用
difftime()
函数

例如:

difftime(data$start_time, as.Date(data$start_time))
#or to specify the units
difftime(data$start_time, as.Date(data$start_time), units= "day")

通过从datetime对象中减去date对象,可以使用
difftime()
函数

例如:

difftime(data$start_time, as.Date(data$start_time))
#or to specify the units
difftime(data$start_time, as.Date(data$start_time), units= "day")