繁体   English   中英

用循环填充R中的多个列

[英]Populating multiple colums in R with a loop

我正在尝试根据超时和超时来创建和填充多个列(一天中的每小时一列)。 例如:

如果进站时间为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行。 这是完成此任务的正确方法吗?

您可能有几种方法可以执行此操作而无需循环。 我添加了一个使用子集的示例,该子集应该比循环快得多。 尽管由于我不知道您的数据是什么样子,所以可能必须对其进行调整。

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 intime 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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM