【发布时间】:2019-08-23 15:43:49
【问题描述】:
我正在尝试使用下面编写的函数对数据框中的所有列进行规范化。当我尝试使用下面的 for 循环将其应用于所有列时,输出仅返回一列,而我期望为三列。输出已正确标准化,表明该函数正常工作,问题在于 for 循环。
seq_along(df) 返回相同的输出
### example df
df <- cbind(as.data.frame(c(2:12), c(3:13), c(4:14)))
### normalization function
rescale <- function(x) {
(x - min(x, na.rm = TRUE)) / (max(x, na.rm = TRUE) - min(x, na.rm = TRUE))
}
### for loop that returns one column although properly normalized
for (i in 1:ncol(df)){
i <- df[[i]]
output <- as.data.frame(rescale(i))
}
【问题讨论】:
-
已有
scale函数,可以直接使用scale(df)也可以将cbind(as.data.frame改成data.frame( -
您不断地重新分配相同的
output变量。您替换每个循环中的值,而不是添加它。
标签: r