R因子值发生变化

时间:2012-06-21 16:19:33

标签: r loops numeric na r-factor

我正在尝试在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 

我看到有一个角色向上移动 - &gt;数字转换,但我无法弄清楚为什么会发生这种情况,特别是对于其中一个数据帧/循环。

有什么建议吗?

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:2)

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

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