R语言数据框缩放:保留前9列标识并合并缩放后列的实现方法
解决方法
scale() 函数返回的是和输入数据行顺序完全一致的矩阵,不需要走merge这种重匹配的操作,直接按列绑定即可,执行效率也适配400万行的大数据量。
方案1:直接列绑定(最高效,推荐)
注意你原来的代码df[-9]是仅移除第9列,前8列标识也会被纳入标准化,不符合只缩放特征列的需求,正确写法如下:
# 仅对第10列及之后的特征列做标准化,转成dataframe方便后续处理 dfscaled <- as.data.frame(scale(df[,-c(1:9)])) # 直接绑定前9列标识和缩放后的特征 df_final <- cbind(df[,c(1:9)], dfscaled)
注意:cbind 要求两个对象的行数完全相等,scale处理后的矩阵和原数据行数100%匹配,只要你没对原数据做过排序、过滤操作,不需要额外校验行顺序。
方案2:行匹配合并(仅适合缩放后调整过行顺序的场景,大表性能较差)
如果你的数据在缩放后做过行顺序调整,可以先加唯一行ID再做merge:
# 先给原数据加唯一行ID df$row_id <- 1:nrow(df) # 缩放特征列 dfscaled <- as.data.frame(scale(df[,-c(1:9, ncol(df))])) # 给缩放后的数据集补上行ID dfscaled$row_id <- df$row_id # 按行ID merge df_final <- merge(df[,c(1:9, ncol(df))], dfscaled, by = "row_id") # 可选删除临时行ID列 df_final$row_id <- NULL
内容的提问来源于stack exchange,提问作者DataScienceDave
相关产品推荐
相关产品推荐

