在移除响应变量以进行标准化后,如何将其重新合并到数据框中?

How do you remerge the response variable to the data frame after removing it for standardization?

我有一个包含 61 列的数据集(60 个解释变量和 1 个响应变量)。

所有的解释变量都是数值的,响应是分类的(默认)。一些前。变量具有负值(财务数据),因此标准化比规范化似乎更明智。但是,在使用“apply”函数进行标准化时,我必须先删除响应变量,所以我这样做:

型号<- read.table......

modelwithnoresponse <- model 
modelwithnoresponse$Default <- NULL
means <- apply(modelwithnoresponse,2mean)
standarddeviations <- apply(modelwithnoresponse,2,sd)
modelSTAN <- scale(modelwithnoresponse,center=means,scale=standarddeviations)

到目前为止一切顺利,数据已标准化。但是,现在我想将响应变量添加回“modelSTAN”。我看过一些关于 dplyr、merge-functions 和 rbind 的帖子,但我无法完全开始工作,因此只能将响应作为最后一列添加回我的“modelSTAN”。

有没有人对此有好的解决方案,或者在不先删除响应变量的情况下对其进行标准化的另一种解决方法?

我对 R 很陌生,因为我是一名金融专业的学生,​​并且选修了 R..

如果要将列 model$Default 添加到 modelSTAN 数据框,可以这样做

# assign the column directly
modelSTAN$Default <- model$Default
# or use cbind for columns (rbind is for rows)
modelSTAN <- cbind(modelSTAN, model$Default)

但是,您根本不需要将其删除。这是一个替代方案:

modelSTAN <- model 
## get index of response, here named default
resp <- which(names(modelSTAN) == "default")
## standardize all the non-response columns
means <- colMeans(modelSTAN[-resp])
sds <- apply(modelSTAN[-resp], 2, sd)
modelSTAN[-resp] <- scale(modelSTAN[-resp], center = means, scale = sds)

如果您对dplyr感兴趣:

library(dplyr)
modelSTAN <- model %>%
  mutate(across(-all_of("default"), scale))

请注意,在 dplyr 版本中,我没有费心保存原始方法和 SD,如果您想稍后进行反向转换,您仍然应该这样做。默认情况下,scale 将使用 meansd.