【发布时间】:2023-04-08 07:47:01
【问题描述】:
我有一个执行 PCA 和 FA 的 df。现在我想使用我的 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 结合使用。我试过了,但绝望地失败了。
我希望有人可以帮助我一点?提前谢谢你:-)
【问题讨论】: