如何将 05:30 添加到时间列?

How to add 05:30 to Time column?

在我的数据框中,我想将 5 小时 30 分钟添加到时间列,然后将时间字段分组为 2 小时(0-2,3-6.. 像这样直到 21-23)。这是下面的数据框:

Time      Date          Device
7:12:20   12/14/2016    Tablet
8:57:34   12/12/2016    Desktop
18:48:36  12/1/2016     Desktop
4:27:34   12/16/2016    Desktop
5:57:48   12/28/2016    Desktop
10:28:31  12/20/2016    Desktop
10:28:32  12/20/2016    Desktop

有多种方法。

案例一:将5小时30分换算成秒,加入时间列

*我必须更喜欢在添加时间之前,即 5 小时 30 分钟,你必须合并时间和日期列,以防你有时间接近 2100 小时导致日期更改 *

加入专栏后,您可以进行以下操作:

dataframe$newtime <- as.POSIXct(dataframe$dateandtimetogether) + noofseconds

案例 2:通过定义小时和分钟的函数

这种情况下必须加入日期和时间栏,以后可以方便的分开

hrs <- function(u) {
  x <- u * 3600
return(x)
}

mns <- function(m) {
  x <- m * 60
  return(x)
}


dataframe$newtime <- as.POSIXct(dataframe$dateandtimetogether)  + hrs(5) + mns(30)

类似于:

hms("20:00:00") + hm("5:30")

将生成一个包含以下内容的对象:

## [1] "25H 30M 0S"

不太有用(在这种情况下)。

这是一种添加时间和创建休息时间的方法:

df <- read.table(text="Time      Date          Device
7:12:20   12/14/2016    Tablet
8:57:34   12/12/2016    Desktop
18:48:36  12/1/2016     Desktop
4:27:34   12/16/2016    Desktop
5:57:48   12/28/2016    Desktop
10:28:31  12/20/2016    Desktop
10:28:32  12/20/2016    Desktop", header=TRUE, stringsAsFactors=FALSE)

library(lubridate)
library(magrittr)

(mdy_hms(sprintf("%s %s", df$Date, df$Time)) + hm("5:30")) %>%
  hour() %>%
  cut(breaks=seq(0, 24, 2), include.lowest=TRUE)
## [1] (10,12] (12,14] [0,2]   (8,10]  (10,12] (14,16] (14,16]
## 12 Levels: [0,2] (2,4] (4,6] (6,8] (8,10] (10,12] (12,14] ... (22,24]

这将是处理您的案件的一种方式。您的数据在这里被称为 mydf。首先,您可以使用 paste()as.POSIXct() 创建一个日期对象。因为要加上2小时30分钟,所以我给date对象加了60(sec)*150(min),创建了foo。然后,我从 foo 中提取小时-分钟-秒部分并创建一个名为 Time2 的新列。最后的工作是用cut()创建一个组变量。我不知道你想如何标记这些组,所以我将它们命名为组 1、组 2 等等。

library(dplyr)

mydf %>%
mutate(foo = as.POSIXct(paste(Date, Time, sep = " "),
                format("%m/%d/%Y %H:%M:%S"), tz = "UTC") +
                (60 * 150),
       Time2 = format(foo, "%H:%M:%S"),
       group = cut(as.numeric(format(foo, "%H")), breaks = seq(0, 24, 3),
                   labels = paste("group", 1:8, sep = " "),
                   include.lowest = TRUE)) %>%
select(-foo)

#      Time       Date  Device    Time2    group
#1  7:12:20 12/14/2016  Tablet 09:42:20  group 3
#2  8:57:34 12/12/2016 Desktop 11:27:34  group 4
#3 18:48:36  12/1/2016 Desktop 21:18:36  group 7
#4  4:27:34 12/16/2016 Desktop 06:57:34  group 2
#5  5:57:48 12/28/2016 Desktop 08:27:48  group 3
#6 10:28:31 12/20/2016 Desktop 12:58:31  group 4
#7 10:28:32 12/20/2016 Desktop 12:58:32  group 4

数据

mydf <- structure(list(Time = c("7:12:20", "8:57:34", "18:48:36", "4:27:34", 
"5:57:48", "10:28:31", "10:28:32"), Date = c("12/14/2016", "12/12/2016", 
"12/1/2016", "12/16/2016", "12/28/2016", "12/20/2016", "12/20/2016"
), Device = c("Tablet", "Desktop", "Desktop", "Desktop", "Desktop", 
"Desktop", "Desktop")), .Names = c("Time", "Date", "Device"), class = "data.frame", row.names = c(NA, 
-7L))