Это продолжение этого вопроса здесь:
For-Loop By Columns с существующим For-loop by Rows
У меня есть набор данных, в котором я использую 3 переменные:
adstock_rate
, diminishing_rate
и lag_number
,
В настоящее время они установлены только на 1 номер.
В настоящее время я использую следующие номера:
adstock_rate<-0.5
lag_number<-1
diminishing_rate<-0.6
Окончательный вывод - это набор данных с новыми столбцами, присоединенными к существующему набору данных с использованием функции, приведенной ниже.
foo1 <- function(dot, lag_val = 1) {
tmp <- dot
for(i in (1 + lag_val): length(tmp)) {
tmp[i] <- tmp[i] + adstock_rate * diminishing_rate * tmp[i - lag_val]
}
return(tmp)
}
advertising_dataset %>%
group_by(Region) %>%
mutate_all(funs(adstocked = foo1(., lag_val = lag_number)))
Вот что я пытаюсь сделать:
Я хочу применить эту функцию к различным значениям этих переменных. Ниже приведены комбинации этих переменных:
adstock_rate = c(0.50, 0.60, 0.70)
lag_number = c(0,1)
diminishing_rate = c(0.50, 0.60)
combos<-expand.grid(adstock_rate,lag_number,diminishing_rate)
colnames(combos)[1]<-"AdStock_Rate"
colnames(combos)[2]<-"Lag_Number"
colnames(combos)[3]<-"Diminish_Rate"
head(combos)
AdStock_Rate Lag_Number Diminish_Rate
1 0.5 0 0.5
2 0.6 0 0.5
3 0.7 0 0.5
4 0.5 1 0.5
5 0.6 1 0.5
6 0.7 1 0.5
7 0.5 0 0.6
8 0.6 0 0.6
9 0.7 0 0.6
10 0.5 1 0.6
Я думаю, вам нужно было бы создать цикл for или использовать функцию apply, чтобы перейти вниз по списку строк в наборе данных combos.
Вот моя попытка:
for(j in combos){
foo1 <- function(dot, lag_val = 1) {
tmp <- dot
for(i in (1 + lag_val): length(tmp)) {
tmp[i] <- tmp[i] + combos[j,1] * combos[j,3] * tmp[i - lag_val]
}
return(tmp)
}
advertising_dataset %>%
group_by(Region) %>%
mutate_all(funs(adstocked = foo1(., lag_val = combos[j,2])))
##cbind to previous output
}
Мне также нужно, чтобы имена столбцов имели числовые значения, такие как adstock_0.5_1_0.6
, где 0,5 = коэффициент запаса, 1 = число отставаний и уменьшение = 0,6.
Надеюсь, это имеет смысл.
Пожалуйста, дайте мне знать, если вам нужна дополнительная информация.
Спасибо!