【问题标题】:R factor values changingR 因子值变化
【发布时间】:2012-06-21 16:19:33
【问题描述】:

我正在尝试在 R 中进行一些数据操作。我有 2 个数据框,一个是训练数据,另一个是测试数据,所有数据都是分类数据并存储为因子变量。

数据中有一些 NA,我正在尝试将它们转换为“-1”。当我为训练数据做这件事时,一切都很好,但对测试数据却不是。

在我运行的循环中,有些东西改变了值,但我不知道是什么。

这是以前的:

> class(catTrain1[,"Cat_111"])
[1] "factor"
> class(catTest1[,"Cat_111"])
[1] "factor"

> table(catTrain1[,"Cat_111"])

  1   2 
726  25 
> table(catTest1[,"Cat_111"])

  0   1   2 
  1 503  15 

这是循环:

> for(i in 1:ncol(catTrain1)){
+ catTrain1[,i] <- as.factor(as.character(ifelse(is.na(catTrain1[,i]), "-1", catTrain1[,i])))
+ }
> for(i in 1:ncol(catTest1)){
+ catTest1[,i]  <- as.factor(as.character(ifelse(is.na(catTest1[,i]), "-1", catTest1[,i])))
+ }

接下来是:

> table(catTrain1[,"Cat_111"])

  1   2 
726  25 
> table(catTest1[,"Cat_111"])

  1   2   3 
  1 503  15 

我已经看到了字符 -> 数字转换的上移,但我无法弄清楚为什么会发生这种情况,尤其是对于其中一个数据帧/循环。

有什么建议吗?

【问题讨论】:

  • 能否提供一些数据?

标签: r loops numeric na r-factor


【解决方案1】:

您对table 的第一组调用中的列名是因子的级别。在对table 的第二组调用中,列名是级别索引。 ifelse 正在拉动索引,而不是级别。在您的循环中,将 as.character 移动到最后的 catTest1[,i]catTrain1[,i] 周围。

【讨论】:

  • 做到了。非常感谢。
【解决方案2】:

试试这个。 (更像 r,矢量化):

levels( catTest1[,"Cat_111"] ) <- c( catTest1[,"Cat_111"], "-1")
catTest1[,"Cat_111"][ is.na(catTest1[,"Cat_111"]) ] <- -1

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-02-10
    • 1970-01-01
    • 2016-03-09
    • 1970-01-01
    • 1970-01-01
    • 2018-06-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多