2012-06-21 54 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