随机分配教师到学校 dplyr 或类似?
randomly assign teachers to a school with dplyr or similar?
假设我有一个包含 8 所学校及其特征的数据框,另一个包含 48 名教师及其特征的数据框。我可以使用以下代码生成一些假数据:
library(dplyr)
library(geosphere)
set.seed(6232015)
n.schools <-8
n.teachers <- 48
makeRandomString <- function(pre, n=1, length=12) {
randomString <- c(1:n) # initialize vector
for (i in 1:n) {
randomString[i] <- paste0(pre,'.', paste(sample(c(0:9, letters, LETTERS),
length, replace=TRUE),
collapse=""))
}
return(randomString)
}
gen.teachers <- function(n.teachers){
Teacher.ID <- makeRandomString(pre= 'T', n = n.teachers, length = 20)
Teacher.exp <- runif(n = n.teachers, min = 1, max = 30)
Teacher.Other <- sample(c(0,1), replace = T, prob = c(0.5, 0.5), size = n.teachers)
Teachers <- data.frame(Teacher.ID, Teacher.exp, Teacher.Other)
return(Teachers)
}
gen.schools <- function(n.schools){
School.ID <- makeRandomString(pre= 'S', n = n.schools, length = 20)
School.lat <- runif(n = n.schools, min = -2, max = 2)
School.long <- runif(n = n.schools, min = -2, max = 2)
Schools <- data.frame(School.ID, School.lat, School.long) %>%
rowwise() %>% mutate (School.distance = distHaversine(p1 = c(School.long, School.lat),
p2 = c(0, 0), r = 3961))
return(Schools)
}
Teachers <- gen.teachers(n.teachers = n.teachers)
Schools <- gen.schools(n.schools = n.schools)
我想给每个学校分配6个老师(每个老师分配1个而且只有1个学校)。我可以使用:
Teachers %>% sample_n(6)
要获得分配给学校的 6 名教师的列表,请将他们从我原来的池中删除并继续循环。我的 guess/hope 是有一种更简单的方法可以做到这一点。
感谢您的帮助!
在您的代码上下文中
sample(rep(Schools$School.ID, each = 6))
给出一个随机序列的学校,其中每个 school.id 出现 6 次。将 Teachers$AssignedSchool 设置为此示例,每个教师都有一个分配的学校
假设我有一个包含 8 所学校及其特征的数据框,另一个包含 48 名教师及其特征的数据框。我可以使用以下代码生成一些假数据:
library(dplyr)
library(geosphere)
set.seed(6232015)
n.schools <-8
n.teachers <- 48
makeRandomString <- function(pre, n=1, length=12) {
randomString <- c(1:n) # initialize vector
for (i in 1:n) {
randomString[i] <- paste0(pre,'.', paste(sample(c(0:9, letters, LETTERS),
length, replace=TRUE),
collapse=""))
}
return(randomString)
}
gen.teachers <- function(n.teachers){
Teacher.ID <- makeRandomString(pre= 'T', n = n.teachers, length = 20)
Teacher.exp <- runif(n = n.teachers, min = 1, max = 30)
Teacher.Other <- sample(c(0,1), replace = T, prob = c(0.5, 0.5), size = n.teachers)
Teachers <- data.frame(Teacher.ID, Teacher.exp, Teacher.Other)
return(Teachers)
}
gen.schools <- function(n.schools){
School.ID <- makeRandomString(pre= 'S', n = n.schools, length = 20)
School.lat <- runif(n = n.schools, min = -2, max = 2)
School.long <- runif(n = n.schools, min = -2, max = 2)
Schools <- data.frame(School.ID, School.lat, School.long) %>%
rowwise() %>% mutate (School.distance = distHaversine(p1 = c(School.long, School.lat),
p2 = c(0, 0), r = 3961))
return(Schools)
}
Teachers <- gen.teachers(n.teachers = n.teachers)
Schools <- gen.schools(n.schools = n.schools)
我想给每个学校分配6个老师(每个老师分配1个而且只有1个学校)。我可以使用:
Teachers %>% sample_n(6)
要获得分配给学校的 6 名教师的列表,请将他们从我原来的池中删除并继续循环。我的 guess/hope 是有一种更简单的方法可以做到这一点。
感谢您的帮助!
在您的代码上下文中
sample(rep(Schools$School.ID, each = 6))
给出一个随机序列的学校,其中每个 school.id 出现 6 次。将 Teachers$AssignedSchool 设置为此示例,每个教师都有一个分配的学校