Доступ к компонентам списка фреймов данных для использования в циклах в R - PullRequest
0 голосов
/ 31 октября 2018

Я хочу написать код, который будет создавать отдельные столбцы часов и минут в каждом из 13 фреймов данных, которые содержат столбец с именем «DateTimeDur». Поскольку в будущем мне, вероятно, понадобится выполнить другие операции с каждым из этих наборов данных, я хотел бы создать простой блок кода, который будет выполнять любые операции над каждым набором. В частности, мне нужно получить цикл for для добавления столбцов в каждый набор.

Сначала я помещаю все свои наборы данных в список dflist, затем приступаю к созданию цикла for, где время в форме "чч: мм: сс прочее бессмысленно " создает столбец для часов, а другой столбец на минуты. Это работает, если я делаю это для какого-либо одного набора данных, но я не могу заставить его работать в цикле for для всех наборов данных в dflist. Он не выдает никаких ошибок - просто не может добавить столбцы «час» и «минута» к каждому, как я ожидаю ...

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

    Time <- Time2 <- TimeMin <- vector("list", length(FAT1$RecNumber))
    for(i in dflist){
      Time  <- factor(i["TimeDateDura"])
      Time2 <- strptime(Time, "%H:%M:%S")
      TimeHr <- format(Time2, "%H")
      TimeMin <- format(Time2, "%M")
      i["hour"] <- TimeHr
      i["min"] <- TimeMin
    }

Типичный набор данных (FAT1 и т. Д.) Выглядит следующим образом:

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

1 Ответ

0 голосов
/ 31 октября 2018

В дальнейшем я буду использовать пакет CRAN lubridate , поскольку он значительно упрощает работу с датами и временем.

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

Код создания данных.

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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...