如何规范化 R 编程中的数据集? [复制]
Posted
技术标签:
【中文标题】如何规范化 R 编程中的数据集? [复制]【英文标题】:How to normalize the datasets in R programming? [duplicate] 【发布时间】:2017-12-12 21:44:25 【问题描述】:我实现了下面的代码来规范化我在 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
还有其他方法可以实现标准化吗?谁能帮我?
【问题讨论】:
@BLT 但在我的数据框中,我将最后一列作为标签。我不想那样做 【参考方案1】:你可以使用这个 sn-p 来改进你的代码
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])
【讨论】:
这些是更好的方法,可以完成任务......当然! @vinyay,请确保您了解此代码为何有效,因此它会成为真正的工具。或者请 Prem 解释这些步骤的作用。【参考方案2】:如果我理解你的解释是正确的,你是如何要求它做你想让它做的事情的方式有点奇怪:
您要求循环保存到每一列的每一行,该行和列的值减去整列 (i) 的最小值除以该列的最小值和最大值之间的差。
为此,您应该让它查看所有行,在每个 column(i)
中处理每个 row(j)
,然后再移动到下一列。
这不是我个人对数据进行规范化的方式,而是基于您似乎正在做的事情,这将是添加第二个循环和迭代器的方式:
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]))
这会从当前行、列组合中获取值,并使用整列的公式对其进行调整。
【讨论】:
以上是关于如何规范化 R 编程中的数据集? [复制]的主要内容,如果未能解决你的问题,请参考以下文章
如何在 python 中规范化或标准化数据集的特定或选定特征