Для контекста, это продолжение для этого вопроса
Я хочу создать функцию, которая создает число значений из вектора академических c кредитов. 1,5 академических c кредита равны одной неделе обучения в моей стране, это означает, что я могу использовать вектор академических c кредитов на модуль для определения ожидаемых кредитов на определенную дату.
Ради Для ясности вектор выглядит так:
Ekonom<-c(15,15,15,15,7.5,7.5,15,7.5,7.5,15,15,15,30,0)
Это, однако, предполагает, что я связываю вектор академических c кредитов с правильной датой начала. Я могу получить уникальные даты начала для каждой программы, используя следующую функцию:
start_dates<-function(x){
fulldata%>%
filter(program == as.character(rlang::enexpr(x))) %>%
distinct(UTBILDNINGSTILLFALLE_STARTDATUM)%>%drop_na()
}
Если я введу название вектора академических c кредитов (называемых "Экономи" для программы "Экономика") в эту функцию Я получу уникальные даты начала из соответствующей программы (также называемой «Ekonomi»).
Но дата начала - только одно из нескольких значений, которые меня интересуют, полное выражение ближе к этому:
start_dates<-function(x){
summer_break<-ifelse(cumsum(x)<=60, 0, ifelse(cumsum(x)>60 & cumsum(x)<=120 , 1,2))
sd<-fulldata%>%
filter(program == as.character(rlang::enexpr(x))) %>%
distinct(UTBILDNINGSTILLFALLE_STARTDATUM)%>%drop_na()
program<-cbind(x,summer_break)
program<-as.data.frame(program)
program<-program%>%rename(points=x)
program<-program%>%mutate(weeks_course=points/1.5)
program<-program%>%mutate(points_expected=lag(cumsum(points)))
program<-program%>%mutate(points_expected=ifelse(is.na(points_expected),0,points_expected))
program<-program%>%mutate(order=1:n())
program<-crossing(sd, program)
program<-program%>%arrange(sd, order)
}
Когда я использую это выражение, я не получаю даты начала. Я получаю сообщение об ошибке, утверждающее, что:
In program == as.character(rlang::enexpr(x)) :
longer object length is not a multiple of shorter object length
Что я делаю не так и как я могу заставить эту работу работать?
Мой желаемый вывод выглядит так:
structure(list(sd = structure(c(15586, 15586, 15586, 15586, 15586,
15586, 15586, 15586, 15586, 15586, 15586, 15586, 15586, 15586,
15950, 15950, 15950, 15950, 15950, 15950, 15950, 15950, 15950,
15950, 15950, 15950, 15950, 15950, 16314, 16314, 16314, 16314,
16314, 16314, 16314, 16314, 16314, 16314, 16314, 16314, 16314,
16314, 16678, 16678, 16678, 16678, 16678, 16678, 16678, 16678,
16678, 16678, 16678, 16678, 16678, 16678, 17042, 17042, 17042,
17042, 17042, 17042, 17042, 17042, 17042, 17042, 17042, 17042,
17042, 17042, 17406, 17406, 17406, 17406, 17406, 17406, 17406,
17406, 17406, 17406, 17406, 17406, 17406, 17406, 17777, 17777,
17777, 17777, 17777, 17777, 17777, 17777, 17777, 17777, 17777,
17777, 17777, 17777, 18141, 18141, 18141, 18141, 18141, 18141,
18141, 18141, 18141, 18141, 18141, 18141, 18141, 18141), class = "Date"),
points_ekon = c(15, 15, 15, 15, 7.5, 7.5, 15, 7.5, 7.5, 15,
15, 15, 30, 0, 15, 15, 15, 15, 7.5, 7.5, 15, 7.5, 7.5, 15,
15, 15, 30, 0, 15, 15, 15, 15, 7.5, 7.5, 15, 7.5, 7.5, 15,
15, 15, 30, 0, 15, 15, 15, 15, 7.5, 7.5, 15, 7.5, 7.5, 15,
15, 15, 30, 0, 15, 15, 15, 15, 7.5, 7.5, 15, 7.5, 7.5, 15,
15, 15, 30, 0, 15, 15, 15, 15, 7.5, 7.5, 15, 7.5, 7.5, 15,
15, 15, 30, 0, 15, 15, 15, 15, 7.5, 7.5, 15, 7.5, 7.5, 15,
15, 15, 30, 0, 15, 15, 15, 15, 7.5, 7.5, 15, 7.5, 7.5, 15,
15, 15, 30, 0), summer_break_ekon = c(0, 0, 0, 0, 1, 1, 1,
1, 1, 1, 2, 2, 2, 2, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 2, 2,
2, 2, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 0, 0, 0,
0, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 0, 0, 0, 0, 1, 1, 1, 1,
1, 1, 2, 2, 2, 2, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 2, 2, 2,
2, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 0, 0, 0, 0,
1, 1, 1, 1, 1, 1, 2, 2, 2, 2), weeks_course = c(10, 10, 10,
10, 5, 5, 10, 5, 5, 10, 10, 10, 20, 0, 10, 10, 10, 10, 5,
5, 10, 5, 5, 10, 10, 10, 20, 0, 10, 10, 10, 10, 5, 5, 10,
5, 5, 10, 10, 10, 20, 0, 10, 10, 10, 10, 5, 5, 10, 5, 5,
10, 10, 10, 20, 0, 10, 10, 10, 10, 5, 5, 10, 5, 5, 10, 10,
10, 20, 0, 10, 10, 10, 10, 5, 5, 10, 5, 5, 10, 10, 10, 20,
0, 10, 10, 10, 10, 5, 5, 10, 5, 5, 10, 10, 10, 20, 0, 10,
10, 10, 10, 5, 5, 10, 5, 5, 10, 10, 10, 20, 0), points_expected = c(0,
15, 30, 45, 60, 67.5, 75, 90, 97.5, 105, 120, 135, 150, 180,
0, 15, 30, 45, 60, 67.5, 75, 90, 97.5, 105, 120, 135, 150,
180, 0, 15, 30, 45, 60, 67.5, 75, 90, 97.5, 105, 120, 135,
150, 180, 0, 15, 30, 45, 60, 67.5, 75, 90, 97.5, 105, 120,
135, 150, 180, 0, 15, 30, 45, 60, 67.5, 75, 90, 97.5, 105,
120, 135, 150, 180, 0, 15, 30, 45, 60, 67.5, 75, 90, 97.5,
105, 120, 135, 150, 180, 0, 15, 30, 45, 60, 67.5, 75, 90,
97.5, 105, 120, 135, 150, 180, 0, 15, 30, 45, 60, 67.5, 75,
90, 97.5, 105, 120, 135, 150, 180), order = c(1L, 2L, 3L,
4L, 5L, 6L, 7L, 8L, 9L, 10L, 11L, 12L, 13L, 14L, 1L, 2L,
3L, 4L, 5L, 6L, 7L, 8L, 9L, 10L, 11L, 12L, 13L, 14L, 1L,
2L, 3L, 4L, 5L, 6L, 7L, 8L, 9L, 10L, 11L, 12L, 13L, 14L,
1L, 2L, 3L, 4L, 5L, 6L, 7L, 8L, 9L, 10L, 11L, 12L, 13L, 14L,
1L, 2L, 3L, 4L, 5L, 6L, 7L, 8L, 9L, 10L, 11L, 12L, 13L, 14L,
1L, 2L, 3L, 4L, 5L, 6L, 7L, 8L, 9L, 10L, 11L, 12L, 13L, 14L,
1L, 2L, 3L, 4L, 5L, 6L, 7L, 8L, 9L, 10L, 11L, 12L, 13L, 14L,
1L, 2L, 3L, 4L, 5L, 6L, 7L, 8L, 9L, 10L, 11L, 12L, 13L, 14L
)), row.names = c(NA, -112L), class = c("tbl_df", "tbl",
"data.frame"))
Small exerpt of data:
structure(list(UTBILDNINGSTILLFALLE_STARTDATUM = structure(c(15586,
15586, 15586, 15586, 15586, 15586, 15586, 15586, NA, 15586, 15586,
NA, 15586, 15586, 15586, NA, 15586, 15586, 15586, 15586), class = "Date"),
program = c("Ekonom", "Mäklarekonom", "Ekonom", "Mäklarekonom",
"Ekonom", "Ekonom", "Ekonom", "Ekonom", "Mäklarekonom", "Ekonom",
"Ekonom", "Mäklarekonom", "Ekonom", "Ekonom", "Mäklarekonom",
"Mäklarekonom", "Ekonom", "Ekonom", "Mäklarekonom", "Mäklarekonom"
)), class = c("tbl_df", "tbl", "data.frame"), row.names = c(NA,
-20L))