R语言中为数据框动态添加归一化新列的实现方法
解决R数据框新增归一化列的问题
嘿,刚接触R生态没几天就能写出这样的代码已经很厉害了!你现在需要的是把归一化结果存成新列而不是覆盖原列,其实只需要调整一下normalizeAllCols函数的逻辑就行,核心就是保留原列的同时,把处理后的结果作为新列添加进去。
修改后的完整代码
# 读取数据 myDf <- read.csv("MyData.csv", header = TRUE) # 归一化函数(这个不用改) normalize <- function(x) { return ((x - min(x, na.rm = TRUE)) / (max(x, na.rm = TRUE) - min(x, na.rm = TRUE))) } # 修改后的批量处理函数 normalizeAllCols <- function(df){ # 第一步:筛选出所有数值列的名称 num_cols <- names(df)[sapply(df, is.numeric)] # 第二步:生成新列的名称,格式是"norm"+原列名 new_col_names <- paste0("norm", num_cols) # 第三步:对每个数值列应用归一化函数,并存入新列 df[new_col_names] <- lapply(df[num_cols], normalize) # 返回处理后的完整数据框 df } # 调用函数得到结果 normalizedDf <- normalizeAllCols(myDf)
关键改动说明
- 原来的代码是直接替换数值列,现在我们先通过
names(df)[sapply(df, is.numeric)]拿到所有数值列的名字,这样能精准定位要处理的列,也方便生成新列名。 - 用
paste0("norm", num_cols)批量生成符合要求的新列名,比如原列是age,新列就会是normage。 - 最后用
df[new_col_names] <- ...把归一化后的结果作为新列添加到原数据框里,原列会被完整保留。
这样处理后,你的normalizedDf里既有原始的数值列,也有对应的归一化新列啦~
内容的提问来源于stack exchange,提问作者noob
相关产品推荐
相关产品推荐

