我实现了以下代码来规范化R中的数据框。但是我得到了以下错误
for(i in 1:56){
clean_data[(clean_data[,i]),i] <-(clean_data[,i] - min(clean_data[,i])) / (max(clean_data[,i]) - min(clean_data[,i]))
}
错误
Error: cannot allocate vector of size 9.9 Gb
还有其他方法可以实现规范化吗?谁能帮我?
答案 0 :(得分:1)
您可以使用此代码段作为代码的改进
max_col <- apply(clean_data[,-1], 2, max)
min_col <- apply(clean_data[,-1], 2, min)
clean_data_scaled <- as.data.frame(scale(clean_data[,-1], center = min_col, scale = max_col - min_col))
或强>
clean_data_scaled <- scale(clean_data[, -1])
答案 1 :(得分:0)
如果我理解你的解释权,你会如何要求它去做你想做的事情,这有点令人讨厌:
您要求循环保存到每列的每一行中,该行和列的值减去整列(i)的最小值,除以该列的最小值和最大值之间的差值。 / p>
要执行此操作,您应该让它查看所有行,在每个row(j)
中处理每个column(i)
,然后再继续下一列。
这不是我个人规范化数据的方式,而是建立在你正在做的事情的基础上,这将是添加第二个循环和迭代器的方式:
for(i in 1:56){
for(j in 1:nrow(clean_data)){
clean_data[j ,i] <-(clean_data[j,i] - min(clean_data[,i])) / (max(clean_data[,i]) - min(clean_data[,i]))
}
}
这将从当前行,列组合中获取值,并使用您的完整列公式对其进行调整。