将 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 数据框中的所有元素(按列)[重复]的主要内容,如果未能解决你的问题,请参考以下文章