2012-06-21 55 views
0

我想在R中做一些数据处理。我有2个数据帧,一个是训练数据,另一个测试数据是所有数据都是分类的,并存储为因子变量。R因子值改变

数据中有一些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 

我接一个角色看到加档 - >数值转换,但我不明白为什么会发生这种情况,特别是对于其中一个数据帧/循环。

有什么建议吗?

+1

您能否提供一些数据? –

回答

2

第一组调用table的列名称是该因子的级别。在第二组对table的调用中,列名称是级别索引。 ifelse正在拉动指标,而不是水平。在您的循环中,将as.character移至最后的catTest1[,i]catTrain1[,i]附近。

+0

这样做。非常感谢你。 – screechOwl

2

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

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