archivo_zip <- "T1D_Datos_Enrique.zip"
carpeta_destino <- "datos_descom"

unzip(archivo_zip, exdir = carpeta_destino)

#solo toma la carpeta de glucosa
ruta_glucosa <- file.path(carpeta_destino, "T1D_Datos_Enrique", "Glucose Data")

#Primera parte del algortimo Primero se resume cada uno de los archivos en la carpeta glucosa

if (dir.exists(ruta_glucosa)) {
  # enlistan los archivos que tiene la carpeta
  archivos_csv <- list.files(ruta_glucosa, pattern = "\\.csv$", full.names = TRUE)
  
  cat("Archivos encontrados en carpeta glucosa:", length(archivos_csv), "\n")
  
  estadisticas <- data.frame()
  
  #esta parte lee cada archivo y saca la estadistica de cada uno 
  for (archivo in archivos_csv) {
    datos <- read.csv(archivo)
    #todos los archivos tienen "value" de nombre en la columna de glucosa
    if ("value" %in% names(datos)) { 
      glucosa <- datos$value
      
      estadisticas <- rbind(estadisticas, data.frame(
        Archivo = basename(archivo),
        Media = mean(glucosa, na.rm = TRUE),
        Desviacion = sd(glucosa, na.rm = TRUE),
        Q1_valor = quantile(glucosa, probs = 0.25, na.rm = TRUE),
        Q3_valor = quantile(glucosa, probs = 0.75, na.rm = TRUE)
      ))
    }
  }

  print("Resultados de glucosa:")
  print(estadisticas)
  write.csv(estadisticas, "glucosa_estadistica.csv", row.names = FALSE)
}    
## Archivos encontrados en carpeta glucosa: 17 
## [1] "Resultados de glucosa:"
##                  Archivo     Media Desviacion Q1_valor Q3_valor
## 25%   UoMGlucose2301.csv  8.228496   2.609677      6.3      9.6
## 25%1  UoMGlucose2302.csv  7.488382   2.065474      6.0      8.7
## 25%2  UoMGlucose2303.csv  7.103580   1.818765      5.7      8.3
## 25%3  UoMGlucose2304.csv  8.732870   3.252493      6.3     10.5
## 25%4  UoMGlucose2305.csv 10.190461   4.015740      7.3     12.9
## 25%5  UoMGlucose2306.csv  7.074483   2.455236      5.3      8.4
## 25%6  UoMGlucose2307.csv  9.191914   3.530144      6.8     11.1
## 25%7  UoMGlucose2308.csv  6.954412   2.511779      5.2      8.2
## 25%8  UoMGlucose2309.csv  9.848406   3.960367      6.7     12.5
## 25%9  UoMGlucose2310.csv  7.186166   2.051651      5.7      8.3
## 25%10 UoMGlucose2313.csv  9.759944   4.513118      6.4     12.4
## 25%11 UoMGlucose2314.csv  9.111992   3.356188      6.6     11.2
## 25%12 UoMGlucose2320.csv  7.087106   1.619615      6.0      8.0
## 25%13 UoMGlucose2401.csv  7.704128   3.223151      5.3      9.4
## 25%14 UoMGlucose2403.csv  8.921963   3.430293      6.3     11.2
## 25%15 UoMGlucose2404.csv  8.382089   3.001587      6.2     10.1
## 25%16 UoMGlucose2405.csv  8.679455   3.104716      6.3     10.7

#Conteo de datos por minuto En esta parte se hara conteo de cada archivo por minuto del dia, empezando por 00:00, 00:01 … y asi hasta 23:59 (1440 mintuos del dia)

if (dir.exists(ruta_glucosa)) {
  # enlistan los archivos que tiene la carpeta
  archivos_csv <- list.files(ruta_glucosa, pattern = "\\.csv$", full.names = TRUE)
  
  cat("Archivos encontrados en carpeta glucosa:", length(archivos_csv), "\n")
  
  resultados_conteo <- list()
  
  for (archivo in archivos_csv) {
    datos <- read.csv(archivo)
    
    #se cambia de formato (Character --> POSIXct)
    datos$fecha_posix <- as.POSIXct(datos$bg_ts, format = "%d/%m/%Y %H:%M")
    #se extraen solo los minutos del dia 
    datos$minuto <- format(datos$fecha_posix, "%H:%M")
    
    # Conteo por minuto para cada archivo en glucosa
    conteo <- datos %>%
      group_by(minuto) %>%
      summarise(
        n_registros = n(),
        
      ) %>%
      arrange(minuto)
    
    resultados_conteo[[basename(archivo)]] <- conteo
  }
  
}
## Archivos encontrados en carpeta glucosa: 17

Ahora de manera individual podemos llamar el conteo que tiene cada archivo:

print(head(resultados_conteo[["UoMGlucose2301.csv"]], 20))
## # A tibble: 20 × 2
##    minuto n_registros
##    <chr>        <int>
##  1 00:00           22
##  2 00:01            4
##  3 00:02           18
##  4 00:03           15
##  5 00:04          102
##  6 00:05           21
##  7 00:06            4
##  8 00:07           18
##  9 00:08           15
## 10 00:09          101
## 11 00:10           22
## 12 00:11            4
## 13 00:12           18
## 14 00:13           15
## 15 00:14          102
## 16 00:15           21
## 17 00:16            4
## 18 00:17           18
## 19 00:18           15
## 20 00:19          103
print(head(resultados_conteo[["UoMGlucose2303.csv"]], 20))
## # A tibble: 20 × 2
##    minuto n_registros
##    <chr>        <int>
##  1 00:02           16
##  2 00:03           33
##  3 00:06            1
##  4 00:07           18
##  5 00:08           32
##  6 00:12           16
##  7 00:13           33
##  8 00:15            1
##  9 00:17           17
## 10 00:18           32
## 11 00:22           17
## 12 00:23           32
## 13 00:27           17
## 14 00:28           32
## 15 00:32           17
## 16 00:33           32
## 17 00:37           17
## 18 00:38           32
## 19 00:42           17
## 20 00:43           32

#Minutos con mas registros En esta parte se extraen los minutos con mas registros y que coincidan en todos los archivos

todos_datos <- bind_rows(resultados_conteo, .id = "archivo")
names(todos_datos)[2:3] <- c("minuto", "n_registros")

total_archivos <- n_distinct(todos_datos$archivo)

minutos_comunes <- todos_datos %>%
  group_by(minuto) %>%
  filter(n_distinct(archivo) == total_archivos) %>%
  summarise(total_registros = sum(n_registros)) %>%
  arrange(desc(total_registros))

cat("1. MINUTOS COMUNES EN TODOS LOS ARCHIVOS:\n")
## 1. MINUTOS COMUNES EN TODOS LOS ARCHIVOS:
print(minutos_comunes)
## # A tibble: 23 × 2
##    minuto total_registros
##    <chr>            <int>
##  1 23:29              374
##  2 14:14              367
##  3 11:09              365
##  4 17:59              358
##  5 17:50              215
##  6 14:10              212
##  7 13:30              208
##  8 14:25              207
##  9 13:16              206
## 10 23:25              205
## # ℹ 13 more rows

Tambien podemos tener los minutos con mas registro pero sin estar en todos los archivos

top_global <- todos_datos %>%
  group_by(minuto) %>%
  summarise(total_registros = sum(n_registros)) %>%
  arrange(desc(total_registros)) %>%
  head(60)

cat("\n2.  MINUTOS CON MÁS REGISTROS:\n")
## 
## 2.  MINUTOS CON MÁS REGISTROS:
print(top_global)
## # A tibble: 60 × 2
##    minuto total_registros
##    <chr>            <int>
##  1 20:54              390
##  2 22:39              390
##  3 21:04              389
##  4 11:04              388
##  5 23:09              388
##  6 15:34              387
##  7 20:39              387
##  8 19:24              386
##  9 21:24              386
## 10 17:54              385
## # ℹ 50 more rows