R-将整数转换为小时/分钟

时间:2019-06-05 22:17:16

标签: r datetime

谢谢您输入此线程,我相信这是一个简单的问题,所以就到这里了。

我有两列,一列是HOURS,一列是MINUTES,采用24:60格式,这两列都是INTEGERS,我想以TIME(?)格式创建一列,例如:

Hour(Integer)        Minutes(Integer)        Time Column
      5                     30                  5:30
      7                     27                  7:27
     11                     05                 11:05
     17                     45                 17:45
     22                     15                 22:15

差不多了,谢谢。

编辑:Shree的答案只给出了字符

4 个答案:

答案 0 :(得分:3)

使用@Bruno的数据的Base R:

androidTestImplementation 'androidx.test:rules:1.2.0'

我特别在通话中加入了paste(df$Hour, df$Minutes, sep=":") # [1] "5:30" "7:27" "11:5" "17:45" "22:15" as.POSIXct(paste(df$Hour, df$Minutes, sep=":"), format = "%H:%M", tz = "GMT") # [1] "2019-06-05 05:30:00 GMT" "2019-06-05 07:27:00 GMT" # [3] "2019-06-05 11:05:00 GMT" "2019-06-05 17:45:00 GMT" # [5] "2019-06-05 22:15:00 GMT" ,主要是出于“良好做法”的考虑,因为默认情况下,基数R tz=函数不应用(这意味着推断,但不包含)状态,您当前的tz)。没有这个就可以正常工作。

请注意,由于我们未在通话中指定日期/日期,因此始终默认为“今天”(运行POSIXt时)。

答案 1 :(得分:1)

library(lubridate)
library(tidyverse)
library(stringr)
df <- tribble(
~Hour,~Minutes,
5,30,
7,27,
11,05,
17,45,
22,15)

df %>% 
  mutate(time = str_c(Hour,Minutes,sep = ":")) %>% 
  mutate(time = time %>% hm())

答案 2 :(得分:1)

有多种方法可以执行此操作,正如您可以从响应数量中看出的那样。但是我经常发现比较容易的一种方法是使用lubridate::parse_date_time,因为可以解决此类的问题以及许多其他数据处理问题。

df <- data.frame(Hour = c(5,7,11,17,22), 
             Minutes  = c(30,27,05,45,15))

library(dplyr)
library(lubridate)

df <- df %>% 
  dplyr::mutate(Time = format(strptime(lubridate::parse_date_time(paste(Hour, Minutes, sep = ":"), 'H:M'),
                                       "%Y-%m-%d %H:%M:%S"),'%H:%M'))

# Or in a more didactic way
df <- df %>% 
  dplyr::mutate(Time = paste(Hour, Minutes, sep = ":"),
                Time = lubridate::parse_date_time(Time, 'H:M'),
                Time = format(strptime(Time, "%Y-%m-%d %H:%M:%S"),'%H:%M'))

答案 3 :(得分:0)

这是一个整洁的解决方案。这只会创建一个字符变量。

library(tidyverse)
library(stringr)

df <- tibble(Hour = c(5,7,11,17,22), Minutes  = c(30,27,05,45,15))

df %>% 
  mutate(Time = str_c(Hour, Minutes, sep = ':'))