0

I'm trying to split this massive data frame into smaller frames, all broken up by 30 minutes.

I figured this wouldn't be too bad but I've never dealt with milliseconds before. I can't figure out how to convert my time (as a character value) to an actual time.

Then, I figured it might be easier to subset.

So, how would you convert something with milliseconds to a time variable? Also, doing that, how would I split the data frame into multiple data frames split every 30 seconds?

> dput(head(Singolo, n = 100) )
structure(list(TagID = c("Singolo 12062023_S1", "Singolo 12062023_S1", 
"Singolo 12062023_S1", "Singolo 12062023_S1", "Singolo 12062023_S1", 
"Singolo 12062023_S1", "Singolo 12062023_S1", "Singolo 12062023_S1", 
"Singolo 12062023_S1", "Singolo 12062023_S1", "Singolo 12062023_S1", 
"Singolo 12062023_S1", "Singolo 12062023_S1", "Singolo 12062023_S1", 
"Singolo 12062023_S1", "Singolo 12062023_S1", "Singolo 12062023_S1", 
"Singolo 12062023_S1", "Singolo 12062023_S1", "Singolo 12062023_S1", 
"Singolo 12062023_S1", "Singolo 12062023_S1", "Singolo 12062023_S1", 
"Singolo 12062023_S1", "Singolo 12062023_S1", "Singolo 12062023_S1", 
"Singolo 12062023_S1", "Singolo 12062023_S1", "Singolo 12062023_S1", 
"Singolo 12062023_S1", "Singolo 12062023_S1", "Singolo 12062023_S1", 
"Singolo 12062023_S1", "Singolo 12062023_S1", "Singolo 12062023_S1", 
"Singolo 12062023_S1", "Singolo 12062023_S1", "Singolo 12062023_S1", 
"Singolo 12062023_S1", "Singolo 12062023_S1", "Singolo 12062023_S1", 
"Singolo 12062023_S1", "Singolo 12062023_S1", "Singolo 12062023_S1", 
"Singolo 12062023_S1", "Singolo 12062023_S1", "Singolo 12062023_S1", 
"Singolo 12062023_S1", "Singolo 12062023_S1", "Singolo 12062023_S1", 
"Singolo 12062023_S1", "Singolo 12062023_S1", "Singolo 12062023_S1", 
"Singolo 12062023_S1", "Singolo 12062023_S1", "Singolo 12062023_S1", 
"Singolo 12062023_S1", "Singolo 12062023_S1", "Singolo 12062023_S1", 
"Singolo 12062023_S1", "Singolo 12062023_S1", "Singolo 12062023_S1", 
"Singolo 12062023_S1", "Singolo 12062023_S1", "Singolo 12062023_S1", 
"Singolo 12062023_S1", "Singolo 12062023_S1", "Singolo 12062023_S1", 
"Singolo 12062023_S1", "Singolo 12062023_S1", "Singolo 12062023_S1", 
"Singolo 12062023_S1", "Singolo 12062023_S1", "Singolo 12062023_S1", 
"Singolo 12062023_S1", "Singolo 12062023_S1", "Singolo 12062023_S1", 
"Singolo 12062023_S1", "Singolo 12062023_S1", "Singolo 12062023_S1", 
"Singolo 12062023_S1", "Singolo 12062023_S1", "Singolo 12062023_S1", 
"Singolo 12062023_S1", "Singolo 12062023_S1", "Singolo 12062023_S1", 
"Singolo 12062023_S1", "Singolo 12062023_S1", "Singolo 12062023_S1", 
"Singolo 12062023_S1", "Singolo 12062023_S1", "Singolo 12062023_S1", 
"Singolo 12062023_S1", "Singolo 12062023_S1", "Singolo 12062023_S1", 
"Singolo 12062023_S1", "Singolo 12062023_S1", "Singolo 12062023_S1", 
"Singolo 12062023_S1", "Singolo 12062023_S1"), Date = c("12/06/2023", 
"12/06/2023", "12/06/2023", "12/06/2023", "12/06/2023", "12/06/2023", 
"12/06/2023", "12/06/2023", "12/06/2023", "12/06/2023", "12/06/2023", 
"12/06/2023", "12/06/2023", "12/06/2023", "12/06/2023", "12/06/2023", 
"12/06/2023", "12/06/2023", "12/06/2023", "12/06/2023", "12/06/2023", 
"12/06/2023", "12/06/2023", "12/06/2023", "12/06/2023", "12/06/2023", 
"12/06/2023", "12/06/2023", "12/06/2023", "12/06/2023", "12/06/2023", 
"12/06/2023", "12/06/2023", "12/06/2023", "12/06/2023", "12/06/2023", 
"12/06/2023", "12/06/2023", "12/06/2023", "12/06/2023", "12/06/2023", 
"12/06/2023", "12/06/2023", "12/06/2023", "12/06/2023", "12/06/2023", 
"12/06/2023", "12/06/2023", "12/06/2023", "12/06/2023", "12/06/2023", 
"12/06/2023", "12/06/2023", "12/06/2023", "12/06/2023", "12/06/2023", 
"12/06/2023", "12/06/2023", "12/06/2023", "12/06/2023", "12/06/2023", 
"12/06/2023", "12/06/2023", "12/06/2023", "12/06/2023", "12/06/2023", 
"12/06/2023", "12/06/2023", "12/06/2023", "12/06/2023", "12/06/2023", 
"12/06/2023", "12/06/2023", "12/06/2023", "12/06/2023", "12/06/2023", 
"12/06/2023", "12/06/2023", "12/06/2023", "12/06/2023", "12/06/2023", 
"12/06/2023", "12/06/2023", "12/06/2023", "12/06/2023", "12/06/2023", 
"12/06/2023", "12/06/2023", "12/06/2023", "12/06/2023", "12/06/2023", 
"12/06/2023", "12/06/2023", "12/06/2023", "12/06/2023", "12/06/2023", 
"12/06/2023", "12/06/2023", "12/06/2023", "12/06/2023"), Time = c("12:32:13.000", 
"12:32:13.010", "12:32:13.020", "12:32:13.030", "12:32:13.040", 
"12:32:13.050", "12:32:13.060", "12:32:13.070", "12:32:13.080", 
"12:32:13.090", "12:32:13.100", "12:32:13.110", "12:32:13.120", 
"12:32:13.130", "12:32:13.140", "12:32:13.150", "12:32:13.160", 
"12:32:13.170", "12:32:13.180", "12:32:13.190", "12:32:13.200", 
"12:32:13.210", "12:32:13.220", "12:32:13.230", "12:32:13.240", 
"12:32:13.250", "12:32:13.260", "12:32:13.270", "12:32:13.280", 
"12:32:13.290", "12:32:13.300", "12:32:13.310", "12:32:13.320", 
"12:32:13.330", "12:32:13.340", "12:32:13.350", "12:32:13.360", 
"12:32:13.370", "12:32:13.380", "12:32:13.390", "12:32:13.400", 
"12:32:13.410", "12:32:13.420", "12:32:13.430", "12:32:13.440", 
"12:32:13.450", "12:32:13.460", "12:32:13.470", "12:32:13.480", 
"12:32:13.490", "12:32:13.500", "12:32:13.510", "12:32:13.520", 
"12:32:13.530", "12:32:13.540", "12:32:13.550", "12:32:13.560", 
"12:32:13.570", "12:32:13.580", "12:32:13.590", "12:32:13.600", 
"12:32:13.610", "12:32:13.620", "12:32:13.630", "12:32:13.640", 
"12:32:13.650", "12:32:13.660", "12:32:13.670", "12:32:13.680", 
"12:32:13.690", "12:32:13.700", "12:32:13.710", "12:32:13.720", 
"12:32:13.730", "12:32:13.740", "12:32:13.750", "12:32:13.760", 
"12:32:13.770", "12:32:13.780", "12:32:13.790", "12:32:13.800", 
"12:32:13.810", "12:32:13.820", "12:32:13.830", "12:32:13.840", 
"12:32:13.850", "12:32:13.860", "12:32:13.870", "12:32:13.880", 
"12:32:13.890", "12:32:13.900", "12:32:13.910", "12:32:13.920", 
"12:32:13.930", "12:32:13.940", "12:32:13.950", "12:32:13.960", 
"12:32:13.970", "12:32:13.980", "12:32:13.990")), row.names = c(NA, 
100L), class = "data.frame")
Cassidy
  • 395
  • 1
  • 11
  • Where are the milliseconds in your sample data? All the times are `NA` in what you share. – Gregor Thomas Jun 13 '23 at 15:07
  • (And just to make things friendlier, maybe only share relevant columns? To help with this issue, we don't need all-empty-string columns like `zone` and `Metadata`. We don't need all-NA columns like `gmtoff`. We don't need even need `accX` and `accZ` and `Temp....C.`... maybe include one unrelated column as a token. Smaller examples are easier to see what's going on and easier to work with.) – Gregor Thomas Jun 13 '23 at 15:10
  • @GregorThomas Just fixed! Totally forgot to rerun the data set before I uploaded it. – Cassidy Jun 13 '23 at 15:29
  • 2
    Have you tried [this solution](https://stackoverflow.com/a/2150179/903061)? Something like `singolo$datetime = strptime(paste(Singolo$Date, Singolo$Time), format = "%m/%d/%Y %H:%M:%OS")`? – Gregor Thomas Jun 13 '23 at 15:34
  • @GregorThomas I saw that thread and couldn't get my code to work. Yours does - thank you! – Cassidy Jun 13 '23 at 15:45

1 Answers1

2
Singolo$dt <- lubridate::dmy_hms(paste(Singolo$Date, Singolo$Time))
Singolo$time30m = lubridate::floor_date(Singolo$dt, "30 minutes")
split(Singolo, Singolo$time30m)

This will make a list with separate elements for each 30 minute chunk.

Jon Spring
  • 55,165
  • 4
  • 35
  • 53