我想标准化数据框中的许多列,但不是所有列。在向量中指定要操作的列。
为说明,请采用以下模拟数据框:
set.seed(1)
mydf <- data.frame(matrix(sample(100, 36, replace = TRUE), nrow = 12))
定义要操作的两列(请注意,解决方案应适用于按其名称而不是其数据帧编号定义的列的子集):
variables <- c("X1", "X2")
现在,我编写了以下循环来标准化两列,这使我出错。
for (i in seq_along(variables)) {
mydf[variables[i]] <- ((mydf[variables[i]] - mean(mydf[variables[i]], na.rm = TRUE)) / sd(mydf[variables[i]], na.rm = TRUE))
}
正确的方法是什么? (我是R的初学者。)
答案 0 :(得分:2)
您可以使用scale
,并且不需要循环:
mydf[variables] <- scale(mydf[variables])
答案 1 :(得分:0)
标准化功能将为您提供帮助。
set.seed(1)
mydf <- data.frame(matrix(sample(100, 36, replace = TRUE), nrow = 12))
colnames(mydf)
library(mlr)
trainTask <- normalizeFeatures(mydf[c( "X1","X2" )],method = "standardize")
答案 2 :(得分:0)
要使循环正常工作,请使用[[
而不是[
,因为mean
和sd
需要一个向量。
for (i in seq_along(variables)) {
mydf[variables[i]] <-
((mydf[variables[i]] - mean(mydf[[variables[i]]], na.rm = TRUE)) / sd(mydf[[variables[i]]], na.rm = TRUE))
}
但是考虑使用scale
,请参阅@SvenHohenstein的答案。