如何规范化 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 编程中的数据集? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

如何将预测列表转换为R中的规范化表

如何标准化r中的向量[重复]

如何在 python 中规范化或标准化数据集的特定或选定特征

数据库 规范化

Python pandas:规范化数据的最佳方法? [复制]

数据库原理-第6章:规范化