在R中动态地向数据框添加列

3

我在R生态系统中只有几天的经验,正在尝试找到一种方法来为原始数据框中找到的每个数字列添加动态列。

我已经成功地编写了一种改变数据框中现有列值的方法,但我需要将这些计算出的值放入新列而不是覆盖现有列。

到目前为止,我已经完成了以下操作:

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){
    df[,sapply(x, is.numeric)] <- lapply(df[,sapply(df, is.numeric)], normalize)
    df
}

normalizedDf<-normalizeAllCols(myDf)

我通过上面的代码片段(在互联网上得到了很多帮助)来应用normalize函数到给定数据框架中的所有数值列。 我想知道如何将这些计算出来的值放入数据框架中的新列中(在给定的代码片段中,我想知道如何将归一化的值放入一个新列中,例如"norm" + colname)。

1个回答

2
您可以找到那些列名为数字的列,并使用paste0创建新的列。
normalizeAllCols <- function(df){
  cols <- names(df)[sapply(df, is.numeric)]
  df[paste0('norm_', cols)] <- lapply(df[cols], normalize)
  df
}

normalizedDf<-normalizeAllCols(myDf)

dplyr 中,您可以使用 across 直接将函数应用于仅数字列。
library(dplyr)
normalizeAllCols <- function(df){
 df %>%
    mutate(across(where(is.numeric), list(norm = ~normalize)))
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接