解决方案:
您可以使用以下命令将列因子强制转换为整数as.integer
:
使用sapply
:
sapply(gen1,as.integer)
并colwise
从plyr
:
library(plyr)
colwise(as.integer)(gen1)
例如,我首先生成 A、B、C 和 D 的 data.frame:
set.seed(1)
gen1 <- as.data.frame(matrix(sample(LETTERS[1:4], 4 * 5, rep = TRUE), ncol = 4))
## V1 V2 V3 V4
## 1 B D A B
## 2 B D A C
## 3 C C C D
## 4 D C B B
## 5 A A D D
library(plyr)
colwise(as.integer)(gen1)
## V1 V2 V3 V4
## 1 2 3 1 1
## 2 2 3 1 2
## 3 3 2 3 3
## 4 4 2 2 1
## 5 1 1 4 3
sapply(gen1, as.integer)
## V1 V2 V3 V4
## [1,] 2 3 1 1
## [2,] 2 3 1 2
## [3,] 3 2 3 3
## [4,] 4 2 2 1
## [5,] 1 1 4 3
为什么会收到警告?
警告消息是明确的,invalid factor level, NAs generated
。
您收到错误是因为您尝试使用不属于级别集的值修改因子值,因此它将被 NA 替换。我将重现错误:
h <- data.frame(xx = factor(c("A","B")) )
h[h == "A"] <- "C" ## C don't belong to levels of xx
Warning message:
In `[<-.factor`(`*tmp*`, thisvar, value = "C") :
invalid factor level, NA generated