Заполнение нескольких столбцов в R с помощью цикла - PullRequest
0 голосов
/ 30 августа 2018

Я пытаюсь создать и заполнить несколько столбцов (1 для каждого часа дня) в зависимости от времени входа и выхода. Например:

Если время в 13:00, а время в 15:00, я хочу, чтобы мои столбцы для 13:00, 14:00 и 15:00 все говорили 1.

Я создал нужные мне столбцы, и они начинаются с [, 52]. Я пытаюсь перебрать все строки следующим образом:

for (x in 1:nrow(ed)) {
  start <- c(52+as.numeric(ed$ArrivedHour))
  end <- c(start+c(ceiling(ed$TimeDiff)))
  ed[,start:end] <- 1
}

Код работает, но не ошибся. В наборе данных более 200 000 строк. Это правильный способ сделать это?

1 Ответ

0 голосов
/ 30 августа 2018

Вероятно, есть несколько способов сделать это без необходимости зацикливания. Я добавил пример использования поднабора, который должен быть намного быстрее, чем цикл. Хотя я понятия не имею, как выглядят ваши данные, это, вероятно, придется скорректировать.

library(chron)
library(zoo)
#add some example data, time, and two employees
df <- data.frame(time = c("08:00:00", "09:00:00", "10:00:00", "11:00:00", "12:00:00", "13:00:00", "14:00:00", "15:00:00"), eA =c("", "", "", "", "", "", "", ""), eB= c("", "", "", "", "", "", "", ""))
df$time <- chron(times = df[,1])
df

      time eA eB
1 08:00:00      
2 09:00:00      
3 10:00:00      
4 11:00:00      
5 12:00:00      
6 13:00:00      
7 14:00:00      
8 15:00:00

Создайте функцию для time in и time out, поднастроите строки между ними и заполните другую строку 1.

timeclock <- function(time.in, time.out) {
df$eA <- 0
df$eB <- 0
time.in = chron(times = time.in)
time.out = chron(times = time.out)
df[df$time >= time.in & df$time <= time.out, 2] <- 1
df
}

timeclock("10:00:00", "14:00:00")
df

      time eA eB
1 08:00:00  0  0
2 09:00:00  0  0
3 10:00:00  1  0
4 11:00:00  1  0
5 12:00:00  1  0
6 13:00:00  1  0
7 14:00:00  1  0
8 15:00:00  0  0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...