У меня есть df, на котором я выполнял PCA и FA.Теперь я хочу использовать мою FA-модель для расчета моих новых значений факторов.Таким образом, у меня есть df с измеренными значениями для расчета и отдельный df с именем переменной, размером загрузки для использования в расчете и номером фактора, которому она принадлежит.Вот некоторые фиктивные данные:
set.seed(4711)
df <- data.frame(matrix(sample(0:6, 120, replace = TRUE), ncol = 15, nrow = 8))
var <- colnames(df)
load_val <- rnorm(length(var), mean = .5, sd = .2)
fac_nr <- c(2,2,1,3,5,4,1,1,3,2,4,2,5,2,2)
fa_dat <- data.frame(var, load_val, fac_nr)
fa_dat[fac_nr == 1, "var"]`
Так что теперь мне нужно вычислить 5 новых переменных, от F1 до F5.В жестком кодировании это будет что-то вроде:
#Creating and calculating F1 (on 3 variables)
f1_var <- as.character(fa_dat[fac_nr == 1, "var"]) #The variables to use
f1_load <- fa_dat[fac_nr == 1, "load_val"] #The loadings to use
df$F1 <- df[f1_var[1]] * f1_load[1] + df[f1_var[2]] * f1_load[2] +
df[f1_var[3]] * f1_load[3]
#Creating and calculating F2 (on 6 variables)
f2_var <- as.character(fa_dat[fac_nr == 2, "var"])
f2_load <- fa_dat[fac_nr == 2, "load_val"]
df$F2 <- df[f2_var[1]] * f2_load[1] + df[f2_var[2]] * f2_load[2] +
df[f2_var[3]] * f2_load[3] + df[f2_var[4]] * f2_load[4] +
df[f2_var[5]] * f2_load[5] + df[f2_var[6]] * f2_load[6]
#Creating and calculating F3 (on 2 variables)
f3_var <- as.character(fa_dat[fac_nr == 3, "var"])
f3_load <- fa_dat[fac_nr == 3, "load_val"]
df$F3 <- df[f3_var[1]] * f3_load[1] + df[f3_var[2]] * f3_load[2]
#Creating and calculating F4 (on 2 variables)
f4_var <- as.character(fa_dat[fac_nr == 4, "var"])
f4_load <- fa_dat[fac_nr == 4, "load_val"]
df$F4 <- df[f4_var[1]] * f4_load[1] + df[f4_var[2]] * f4_load[2]
#Creating and calculating F5 (on 2 variables)
f5_var <- as.character(fa_dat[fac_nr == 5, "var"])
f5_load <- fa_dat[fac_nr == 5, "load_val"]
df$F5 <- df[f5_var[1]] * f5_load[1] + df[f5_var[2]] * f5_load[2]`
Так что это желаемый результат (не обращайте внимания на названия):
Я знаю, как сделать новые переменные в цикле, но я не знаю - и действительно не мог найти - как рассчитать значение в этой новой переменной, где длина вычислений меняется и где я получаюимена переменных из другого объекта и выбор их по F-номеру.Я думаю, что решение может быть в использовании функции mutate
в сочетании с lapply
.Я пытался, но отчаянно потерпел неудачу.
Надеюсь, кто-нибудь мне поможет?Заранее спасибо: -)