0

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

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

有什么建议么?

4

2 回答 2

2

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

levels( catTest1[,"Cat_111"] ) <- c( catTest1[,"Cat_111"], "-1")
catTest1[,"Cat_111"][ is.na(catTest1[,"Cat_111"]) ] <- -1
于 2012-06-21T16:52:01.520 回答
2

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

于 2012-06-21T16:41:17.580 回答