【问题标题】:Is there an easy way to standardize every single column in a table without loops (using R)?有没有一种简单的方法可以在没有循环的情况下标准化表中的每一列(使用 R)?
【发布时间】:2012-07-24 11:10:05
【问题描述】:

我需要标准化数据框中除了一列之外的所有内容,我正在使用 knn。我知道我可以用循环来做到这一点,但似乎有一种更简单的方法,特别是因为我正在处理 200 多个列/因子,这些列/因子必须被重命名。

有什么建议吗?

【问题讨论】:

  • 我会使用 scale 标准化 所有 列,将结果保存到新的数据框(实际上您可能需要一个矩阵才能使用 scale -- I不记得了),然后将要保留的列的原始(非标准化)副本复制回新数据框。

标签: r loops transform normalize


【解决方案1】:

是的。我假设您更愿意根据其名称来识别不被缩放的变量,而不是通过它的列位置来识别它。如果没有玩具示例,我只能推测这正是您想要的。

x <- data.frame(replicate(10, rnorm(10)))
names(x) <- letters[1:10]

##let's say you don't want to scale "b"
scalevars <- setdiff(names(x), "b")
x.scaled <- data.frame(sapply(x[,scalevars], scale),b=x[,"b"])
x.scaled <- x.scaled[,names(x)] #to get the original order of variables

【讨论】:

  • 谢谢@Michael。这很容易理解。很抱歉没有包括一个虚拟的例子。我还能够使用代码轻松地不规范化因子变量列表,而不仅仅是 b!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-09-30
  • 1970-01-01
  • 2010-10-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多