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