r - 使用循环填充 R 中的多个列
问题描述
我正在尝试根据时间和超时创建和填充多个列(一天中的每个小时 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 行。这是完成此任务的正确方法吗?
解决方案
可能有几种方法可以做到这一点而无需循环。我添加了一个使用子集的示例,它应该比循环快得多。尽管由于我不知道您的数据是什么样的,但可能必须对其进行调整。
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
为and创建一个函数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
推荐阅读
- tensorflow - Tensorflow 重新训练图像分类器
- c# - 尝试使用 NUnit 测试构造函数时在构造函数中获取有关参数的错误
- swift - 使用 Vapor 查询和映射
- c - 开发一个函数,该函数返回数组中存在的不同值的数量
- google-chrome - 使用 G Suite 帐户在 Chrome 扩展程序中进行身份验证时出现问题
- android - 如何在RelativeLayout中右侧有ImageView时使按钮的宽度匹配父级?
- php - 如果属性困难,如何访问变量的属性
- java - fastjson java.lang.Integer 不能转换为 java.lang.Long
- mysql - 在 MySQL 中创建修改后的主节点
- c# - C#:为什么我不能在扩展方法中使用动态参数?