将 func 应用于 R 数据框中的所有元素(按列)[重复]

Posted

技术标签:

【中文标题】将 func 应用于 R 数据框中的所有元素(按列)[重复]【英文标题】:Apply a func to all elements (columnwise) in a R dataframe [duplicate] 【发布时间】:2020-11-02 09:35:00 【问题描述】:

假设我想缩放数据框中的列。我也许可以使用内置/内部函数来做同样的事情,但我想了解如何使用基本构建块(使用矢量化代码)来做到这一点。我想返回转换后的输入数据框,使其中的每一列都有从 0 到 1 的缩放值。以下是我不成功的尝试:

scaleColumns <- function(x)
    #if max(x) - min(x) = 0, then return the vector as it is. 
    ifelse(test = (max(x) - min(x))!=0, yes = (x- min(x))/(max(x) - min(x)), no = x)


X <- data.frame(c(6:9,3:6))
X_norm = apply(X, 2, scaleColumns)
X_norm 

有什么想法吗?

【问题讨论】:

【参考方案1】:

test 的长度为 1,ifelse 返回的输出长度与test 的长度相同。在这里使用if/else。也不要使用apply 按列使用lapply,因为apply 将数据帧强制转换为矩阵。

scaleColumns <- function(x)
   if((max(x) - min(x))!=0) (x- min(x))/(max(x) - min(x)) else x


X <- data.frame(a = c(6:9,3:6))
X[] = lapply(X, scaleColumns)
X
#      a
#1 0.500
#2 0.667
#3 0.833
#4 1.000
#5 0.000
#6 0.167
#7 0.333
#8 0.500

【讨论】:

尽管我在编写问题陈述时出错了,但这为我正在寻找的解决方案提供了足够的指导

以上是关于将 func 应用于 R 数据框中的所有元素(按列)[重复]的主要内容,如果未能解决你的问题,请参考以下文章

假设某个元素与 R 中的 CSV 文件的文件名相同,则将数据框中的某个元素相乘

将reduce应用于R数据框中一列的每一行,包含一个列表

在数据框中的多列上使用 shapiro.test

将比例 z 检验应用于数据框中的每条记录

将函数应用于数据框中的每一列,观察每一列现有的数据类型

将相同的功能应用于火花数据框行的所有字段