Home > other >  How to combine a Date column with a numerical hour and minute column
How to combine a Date column with a numerical hour and minute column

Time:02-04

I feel like there's already a question out there like this, but how do I merge a Date column with an hour and a minute column that aren't in date form?

I feel like there's a simple way to do this (using as_hms or one of the POS functions, but I can't seem to figure it out).

I looked at this form (Create a Datetime Object in R from a date column (format date) and an hour column (format integer)) but I was pretty confused with that and I couldn't figure out how to use that on my own data.

Here's my data set:

> dput(head(painted_turt_all,100))
structure(list(Turtle = c("L1", "L1", "L1", "L1", "L1", "L1", 
"L1", "L1", "L1", "L1", "L1", "L1", "L1", "L1", "L1", "L1", "L1", 
"L1", "L1", "L1", "L1", "L1", "L1", "L1", "L1", "L1", "L1", "L1", 
"L1", "L1", "L1", "L1", "L1", "L1", "L1", "L1", "L1", "L1", "L1", 
"L1", "L1", "L1", "L1", "L1", "L1", "L1", "L1", "L1", "L1", "L1", 
"L1", "L1", "L1", "L1", "L1", "L1", "L1", "L1", "L1", "L1", "L1", 
"L1", "L1", "L1", "L1", "L1", "L1", "L1", "L1", "L1", "L1", "L1", 
"L1", "L1", "L1", "L1", "L1", "L1", "L1", "L1", "L1", "L1", "L1", 
"L1", "L1", "L1", "L1", "L1", "L1", "L1", "L1", "L1", "L1", "L1", 
"L1", "L1", "L1", "L1", "L1", "L1"), date = c("2017-05-21", "2017-05-21", 
"2017-05-21", "2017-05-21", "2017-05-21", "2017-05-21", "2017-05-21", 
"2017-05-21", "2017-05-21", "2017-05-21", "2017-05-21", "2017-05-21", 
"2017-05-21", "2017-05-21", "2017-05-21", "2017-05-21", "2017-05-21", 
"2017-05-21", "2017-05-21", "2017-05-21", "2017-05-21", "2017-05-21", 
"2017-05-21", "2017-05-21", "2017-05-21", "2017-05-21", "2017-05-21", 
"2017-05-21", "2017-05-21", "2017-05-21", "2017-05-21", "2017-05-21", 
"2017-05-21", "2017-05-21", "2017-05-21", "2017-05-21", "2017-05-21", 
"2017-05-21", "2017-05-21", "2017-05-21", "2017-05-21", "2017-05-21", 
"2017-05-21", "2017-05-21", "2017-05-21", "2017-05-21", "2017-05-21", 
"2017-05-21", "2017-05-21", "2017-05-21", "2017-05-21", "2017-05-21", 
"2017-05-21", "2017-05-21", "2017-05-21", "2017-05-21", "2017-05-21", 
"2017-05-21", "2017-05-21", "2017-05-21", "2017-05-21", "2017-05-21", 
"2017-05-21", "2017-05-21", "2017-05-21", "2017-05-21", "2017-05-21", 
"2017-05-21", "2017-05-21", "2017-05-21", "2017-05-21", "2017-05-21", 
"2017-05-21", "2017-05-21", "2017-05-21", "2017-05-21", "2017-05-21", 
"2017-05-21", "2017-05-21", "2017-05-21", "2017-05-21", "2017-05-21", 
"2017-05-21", "2017-05-21", "2017-05-21", "2017-05-21", "2017-05-21", 
"2017-05-21", "2017-05-21", "2017-05-21", "2017-05-21", "2017-05-21", 
"2017-05-21", "2017-05-21", "2017-05-21", "2017-05-21", "2017-05-22", 
"2017-05-22", "2017-05-22", "2017-05-22"), Hour = c(0L, 0L, 0L, 
0L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 3L, 3L, 3L, 3L, 4L, 4L, 4L, 
4L, 5L, 5L, 5L, 5L, 6L, 6L, 6L, 6L, 7L, 7L, 7L, 7L, 8L, 8L, 8L, 
8L, 9L, 9L, 9L, 9L, 10L, 10L, 10L, 10L, 11L, 11L, 11L, 11L, 12L, 
12L, 12L, 12L, 13L, 13L, 13L, 13L, 14L, 14L, 14L, 14L, 15L, 15L, 
15L, 15L, 16L, 16L, 16L, 16L, 17L, 17L, 17L, 17L, 18L, 18L, 18L, 
18L, 19L, 19L, 19L, 19L, 20L, 20L, 20L, 20L, 21L, 21L, 21L, 21L, 
22L, 22L, 22L, 22L, 23L, 23L, 23L, 23L, 0L, 0L, 0L, 0L), Minute = c(0L, 
15L, 30L, 45L, 0L, 15L, 30L, 45L, 0L, 15L, 30L, 45L, 0L, 15L, 
30L, 45L, 0L, 15L, 30L, 45L, 0L, 15L, 30L, 45L, 0L, 15L, 30L, 
45L, 0L, 15L, 30L, 45L, 0L, 15L, 30L, 45L, 0L, 15L, 30L, 45L, 
0L, 15L, 30L, 45L, 0L, 15L, 30L, 45L, 0L, 15L, 30L, 45L, 0L, 
15L, 30L, 45L, 0L, 15L, 30L, 45L, 0L, 15L, 30L, 45L, 0L, 15L, 
30L, 45L, 0L, 15L, 30L, 45L, 0L, 15L, 30L, 45L, 0L, 15L, 30L, 
45L, 0L, 15L, 30L, 45L, 0L, 15L, 30L, 45L, 0L, 15L, 30L, 45L, 
0L, 15L, 30L, 45L, 0L, 15L, 30L, 45L), Body_temp = c(23.0696666666667, 
23.424, 23.445, 23.3823333333333, 23.1736666666667, 23.257, 23.2156666666667, 
23.132, 22.9023333333333, 23.0483333333333, 22.986, 22.9026666666667, 
22.6316666666667, 22.757, 22.715, 22.632, 22.4436666666667, 22.548, 
22.527, 22.4646666666667, 20.441, 22.1936666666667, 20.942, 19.9616666666667, 
18.918, 19.1056666666667, 18.876, 18.7716666666667, 19.0846666666667, 
18.834, 18.9596666666667, 19.1266666666667, 19.878, 19.4396666666667, 
19.6276666666667, 19.8363333333333, 21.1506666666667, 20.796, 
21.1923333333333, 21.3176666666667, 22.84, 22.319, 23.153, 22.986, 
23.5696666666667, 23.0903333333333, 22.7776666666667, 23.1736666666667, 
25.9243333333333, 24.3826666666667, 25.862, 27.1533333333333, 
25.883, 26.7163333333333, 25.9243333333333, 25.445, 29.1716666666667, 
25.8203333333333, 27.2576666666667, 30.1086666666667, 26.34, 
31.7516666666667, 30.6706666666667, 24.2156666666667, 29.6703333333333, 
29.6296666666667, 33.6436666666667, 33.6646666666667, 26.5686666666667, 
30.2753333333333, 27.757, 24.5283333333333, 23.966, 24.1536666666667, 
24.0286666666667, 23.7366666666667, 23.8406666666667, 24.0703333333333, 
23.945, 23.6323333333333, 23.5906666666667, 23.4026666666667, 
22.7983333333333, 23.3403333333333, 23.132, 21.3386666666667, 
22.84, 23.3613333333333, 23.1526666666667, 23.3406666666667, 
23.2573333333333, 23.153, 22.84, 22.986, 22.9026666666667, 22.7776666666667, 
22.4023333333333, 22.569, 22.4646666666667, 22.3603333333333), 
    Heart_rate = c(26.6666666666667, 14.3333333333333, 18.3333333333333, 
    19.3333333333333, 27, 28, 31, 26.3333333333333, 48.6666666666667, 
    36, 25, 19, 20.6666666666667, 46.6666666666667, 30.6666666666667, 
    15.3333333333333, 20, 18.6666666666667, 32.6666666666667, 
    21.3333333333333, 36.6666666666667, 38.6666666666667, 25.3333333333333, 
    16, 34, 34.3333333333333, 20.6666666666667, 21.3333333333333, 
    21, 43.3333333333333, 13.6666666666667, 17.3333333333333, 
    18.6666666666667, 17, 42, 22.6666666666667, 41.3333333333333, 
    21.6666666666667, 41.6666666666667, 26, 40, 20.6666666666667, 
    23, 22, 29.3333333333333, 21.6666666666667, 23, 28.3333333333333, 
    27.6666666666667, 32, 32.6666666666667, 23.6666666666667, 
    39, 36.3333333333333, 39.3333333333333, 37.3333333333333, 
    33.3333333333333, 37, 34, 40.6666666666667, 33.6666666666667, 
    34.3333333333333, 43.3333333333333, 59, 36.3333333333333, 
    35, 40.3333333333333, 41, 32.3333333333333, 35.3333333333333, 
    32.6666666666667, 24.3333333333333, 28.6666666666667, 27.6666666666667, 
    26, 31, 28.3333333333333, 46.3333333333333, 27.6666666666667, 
    47.3333333333333, 23, 27.6666666666667, 25.6666666666667, 
    20.6666666666667, 14.3333333333333, 24.6666666666667, 18.3333333333333, 
    20.6666666666667, 30.6666666666667, 24, 23, 19, 16.3333333333333, 
    23, 19.6666666666667, 12.6666666666667, 21.6666666666667, 
    26, 14.3333333333333, 15.3333333333333), Percent_basking = c(0, 
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.583333333333333, 
    0.583333333333333, 0.583333333333333, 0.583333333333333, 
    0.75, 0.75, 0.75, 0.75, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 
    1, 0.833333333333333, 0.833333333333333, 0.833333333333333, 
    0.833333333333333, 1, 1, 1, 1, 0.75, 0.75, 0.75, 0.75, 0, 
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)), class = c("grouped_df", 
"tbl_df", "tbl", "data.frame"), row.names = c(NA, -100L), groups = structure(list(
    Turtle = c("L1", "L1", "L1", "L1", "L1", "L1", "L1", "L1", 
    "L1", "L1", "L1", "L1", "L1", "L1", "L1", "L1", "L1", "L1", 
    "L1", "L1", "L1", "L1", "L1", "L1", "L1"), date = c("2017-05-21", 
    "2017-05-21", "2017-05-21", "2017-05-21", "2017-05-21", "2017-05-21", 
    "2017-05-21", "2017-05-21", "2017-05-21", "2017-05-21", "2017-05-21", 
    "2017-05-21", "2017-05-21", "2017-05-21", "2017-05-21", "2017-05-21", 
    "2017-05-21", "2017-05-21", "2017-05-21", "2017-05-21", "2017-05-21", 
    "2017-05-21", "2017-05-21", "2017-05-21", "2017-05-22"), 
    Hour = c(0L, 1L, 2L, 3L, 4L, 5L, 6L, 7L, 8L, 9L, 10L, 11L, 
    12L, 13L, 14L, 15L, 16L, 17L, 18L, 19L, 20L, 21L, 22L, 23L, 
    0L), .rows = structure(list(1:4, 5:8, 9:12, 13:16, 17:20, 
        21:24, 25:28, 29:32, 33:36, 37:40, 41:44, 45:48, 49:52, 
        53:56, 57:60, 61:64, 65:68, 69:72, 73:76, 77:80, 81:84, 
        85:88, 89:92, 93:96, 97:100), ptype = integer(0), class = c("vctrs_list_of", 
    "vctrs_vctr", "list"))), class = c("tbl_df", "tbl", "data.frame"
), row.names = c(NA, -25L), .drop = TRUE))

CodePudding user response:

One option would be to paste your dates, hours and minutes together using paste:

library(dplyr)

painted_turt_all |> 
  mutate(time = paste(Hour, Minute, "00", sep = ":"),
         datetime = as.POSIXct(paste(date, time)))
#> # A tibble: 100 × 9
#> # Groups:   Turtle, date, Hour [25]
#>    Turtle date     Hour Minute Body_…¹ Heart…² Perce…³ time  datetime           
#>    <chr>  <chr>   <int>  <int>   <dbl>   <dbl>   <dbl> <chr> <dttm>             
#>  1 L1     2017-0…     0      0    23.1    26.7       0 0:0:… 2017-05-21 00:00:00
#>  2 L1     2017-0…     0     15    23.4    14.3       0 0:15… 2017-05-21 00:15:00
#>  3 L1     2017-0…     0     30    23.4    18.3       0 0:30… 2017-05-21 00:30:00
#>  4 L1     2017-0…     0     45    23.4    19.3       0 0:45… 2017-05-21 00:45:00
#>  5 L1     2017-0…     1      0    23.2    27         0 1:0:… 2017-05-21 01:00:00
#>  6 L1     2017-0…     1     15    23.3    28         0 1:15… 2017-05-21 01:15:00
#>  7 L1     2017-0…     1     30    23.2    31         0 1:30… 2017-05-21 01:30:00
#>  8 L1     2017-0…     1     45    23.1    26.3       0 1:45… 2017-05-21 01:45:00
#>  9 L1     2017-0…     2      0    22.9    48.7       0 2:0:… 2017-05-21 02:00:00
#> 10 L1     2017-0…     2     15    23.0    36         0 2:15… 2017-05-21 02:15:00
#> # … with 90 more rows, and abbreviated variable names ¹​Body_temp, ²​Heart_rate,
#> #   ³​Percent_basking

CodePudding user response:

Please check the below code

df %>% 
mutate(datehm=lubridate::ymd_hm(paste(year(date), month(date), day(date),Hour, Minute,sep = ',')))

Created on 2023-02-03 with reprex v2.0.2

# A tibble: 100 × 8
# Groups:   Turtle, date, Hour [25]
   Turtle date        Hour Minute Body_temp Heart_rate Percent_basking datehm             
   <chr>  <chr>      <int>  <int>     <dbl>      <dbl>           <dbl> <dttm>             
 1 L1     2017-05-21     0      0      23.1       26.7               0 2017-05-21 00:00:00
 2 L1     2017-05-21     0     15      23.4       14.3               0 2017-05-21 00:15:00
 3 L1     2017-05-21     0     30      23.4       18.3               0 2017-05-21 00:30:00
 4 L1     2017-05-21     0     45      23.4       19.3               0 2017-05-21 00:45:00
 5 L1     2017-05-21     1      0      23.2       27                 0 2017-05-21 01:00:00
 6 L1     2017-05-21     1     15      23.3       28                 0 2017-05-21 01:15:00
 7 L1     2017-05-21     1     30      23.2       31                 0 2017-05-21 01:30:00
 8 L1     2017-05-21     1     45      23.1       26.3               0 2017-05-21 01:45:00
 9 L1     2017-05-21     2      0      22.9       48.7               0 2017-05-21 02:00:00
10 L1     2017-05-21     2     15      23.0       36                 0 2017-05-21 02:15:00
# … with 90 more rows
# ℹ Use `print(n = ...)` to see more rows

  • Related