2 votes

Accéder aux composants d'une liste de cadres de données à utiliser dans des boucles en R

Je veux écrire du code qui créera des colonnes séparées pour l'heure et les minutes dans chacun des 13 cadres de données qui contiennent une colonne nommée "DateTimeDur". Comme il est probable que j'aurai besoin d'effectuer d'autres opérations sur chacun de ces ensembles de données à l'avenir, je voudrais établir un bloc de code simple qui effectuera n'importe quelle opération sur chaque ensemble. Plus précisément, j'ai besoin d'une boucle for pour ajouter des colonnes à chaque ensemble.

Tout d'abord, j'ai mis tous mes ensembles de données dans dflist, puis j'ai créé une boucle for où le temps sous la forme "hh:mm:ss autres absurdités" produit une colonne pour les heures et une autre colonne pour les minutes. Cela fonctionne si je le fais sur n'importe quel ensemble de données, mais je n'arrive pas à le faire fonctionner avec une boucle for pour tous les ensembles de données dans dflist. Cela n'affiche aucune erreur - il ne parvient simplement pas à ajouter les colonnes "heure" et "minute" à chacun d'eux comme je m'y attendais...

dflist <- c(FAT1, FAT2, FAT3, FAT4, FAT5, FAT6, FAT7, FAT8, FAT9, FAT10, FAT11, FAT12, FAT13)

    Temps <- Temps2 <- TempsMin <- vector("list", length(FAT1$RecNumber))
    for(i in dflist){
      Temps  <- factor(i["TimeDateDura"])
      Temps2 <- strptime(Temps, "%H:%M:%S")
      TempsHr <- format(Temps2, "%H")
      TempsMin <- format(Temps2, "%M")
      i["heure"] <- TempsHr
      i["min"] <- TempsMin
    }

Un ensemble de données typique (FAT1, etc.) ressemble à ceci :

RecNumber Label  Fat  Lean FreeWater TotalWater  TimeDateDura Accumulation Weight Comments
1         87001 1.47 11.19      0.05       9.46  09:31:02 Jan 30, 2018; 78;            1      0       NA
2         87002 1.46 11.39      0.07      10.07  09:33:10 Jan 30, 2018; 79;           1      0       NA
3         87003 1.13 10.43      0.15       9.23  09:35:21 Jan 30, 2018; 101;          1      0       NA

0voto

Rui Barradas Points 21005

Dans ce qui suit, j'utiliserai le package CRAN lubridate, car il facilite beaucoup le travail avec les dates et les heures.

library(lubridate)

dflist <- lapply(dflist, function(DF){
  tmp <- hms(DF[["TimeDateDura"]])
  DF[["hour"]] <- hour(tmp)
  DF[["min"]] <- minute(tmp)
  DF
})

dflist$FAT1
#$FAT1
#   TimeDateDura hour min
#1      01:12:57    1  12
#2      04:10:12    4  10
#3      06:41:39    6  41
#4      08:23:07    8  23
#5      13:46:16   13  46
#6      15:30:23   15  30
#7      15:43:00   15  43
#8      21:60:23   21  60
#9      21:23:53   21  23
#10     22:47:20   22  47

Code de création des données.

set.seed(1)

dflist <- lapply(1:13, function(i){
  h <- sort(sprintf("%02d", sample(0:23, 10, TRUE)))
  m <- sprintf("%02d", sample(0:60, 10, TRUE))
  s <- sprintf("%02d", sample(0:60, 10, TRUE))
  data.frame(TimeDateDura = paste(h, m, s, sep = ":"))
})
names(dflist) <- paste0("FAT", 1:13)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X