我不确定如何最好地描述我的问题,但是我正在做一个调度项目。我有一个数据框架,其中包含教授,课程和时隙,以及几列,每列包含一个随机生成的数字。我想使用这些随机数生成不同的计划选项。
这是我所拥有的:
Prof Courses Time Option_1 Option_2
John Course A Time 1 0.7765824 0.3102492
John Course A Time 2 0.5636233 0.4839778
John Course B Time 1 0.5814365 0.7282360
John Course B Time 2 0.2623851 0.5198096
而且,这就是我想要的:
Prof Courses Time Option_1 Option_2
John Course A Time 1 1 0
John Course A Time 2 0 1
John Course B Time 1 0 1
John Course B Time 2 1 0
对于选项1,0.7765824是最高的数字,因此将其更改为一个-意味着将在该时间段内教授课程。下一个最高编号(对于未计划的课程和已填充的时间段)为0.2623851,因此将其更改为1。
对于选项2,0.7282360是最高编号,因此它更改为1,然后,然后0.4839778更改为1,因为这是未计划课程和未填写时间段的最高编号。
[实际数据涉及数百名教授各种课程的教授和数百种选择,因此该解决方案需要能够使用group_by()函数(或类似方法)并且足够灵活,以应对教授多种课程的教授。培训班。
有什么想法吗?
此循环应根据每个选项进行处理,尽管df
确实会以新的顺序返回:
df <- df[order(df$Option_1),]
coursesdone <- c("FakeCourse")
for(i in 1:length(unique(df$Courses))){
df$Option_1[df$Courses != coursesdone][1] = 1
df$Option_1[!(df$Courses[-1] %in% coursesdone)][-1] <- 0
coursesdone[i] <- as.character(df$Courses[df$Courses != coursesdone][1])
}
但是我们可以为您拥有的许多选项堆叠循环
df <- df[order(df$Option_2),]
coursesdone <- c("FakeCourse")
for(i in 1:length(unique(df$Courses))){
df$Option_2[df$Courses != coursesdone][1] = 1
df$Option_2[!(df$Courses[-1] %in% coursesdone)][-1] <- 0
coursesdone[i] <- as.character(df$Courses[df$Courses != coursesdone][1])
}
获得最终输出(一旦执行了两个循环)
> df
Prof Courses Time Option_1 Option_2
1 John CourseA Time1 0 1
2 John CourseA Time2 1 0
4 John CourseB Time2 1 0
3 John CourseB Time1 0 0