首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在删除响应变量以实现标准化后,如何将其重新合并到数据框中?

在删除响应变量以实现标准化后,如何将其重新合并到数据框中?
EN

Stack Overflow用户
提问于 2021-02-02 19:46:53
回答 1查看 29关注 0票数 1

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

所有显式变量都是数值型的,响应是ex的分类(默认).Some。变量具有负值(财务数据),因此标准化比规范化似乎更明智。但是,在使用"apply“函数进行标准化时,我必须首先删除response变量,所以我这样做了:

模型<- read.table.

代码语言:javascript
运行
AI代码解释
复制
modelwithnoresponse <- model 
modelwithnoresponse$Default <- NULL
means <- apply(modelwithnoresponse,2mean)
standarddeviations <- apply(modelwithnoresponse,2,sd)
modelSTAN <- scale(modelwithnoresponse,center=means,scale=standarddeviations)

到目前为止,数据是标准化的。但是,现在我想将response变量添加回"modelSTAN“。我看过一些关于dplyr、合并函数和rbind的帖子,但我不能很好地工作,所以响应将简单地作为最后一列添加到我的"modelSTAN“中。

有没有人有一个很好的解决方案来解决这个问题,或者可能有另一个变通办法来标准化它,而不是先删除response变量?

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-02-02 19:56:51

如果要向modelSTAN数据框中添加model$Default列,可执行以下操作

代码语言:javascript
运行
AI代码解释
复制
# assign the column directly
modelSTAN$Default <- model$Default
# or use cbind for columns (rbind is for rows)
modelSTAN <- cbind(modelSTAN, model$Default)

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

代码语言:javascript
运行
AI代码解释
复制
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感兴趣

代码语言:javascript
运行
AI代码解释
复制
library(dplyr)
modelSTAN <- model %>%
  mutate(across(-all_of("default"), scale))

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

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66016616

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档