我正在尝试在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;数字转换,但我无法弄清楚为什么会发生这种情况,特别是对于其中一个数据帧/循环。
有什么建议吗?
答案 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