我现在正在教自己R.我正在尝试将整数变量转换为分类,具体如下。
train[, c("Store", "DayOfWeek")] <- apply(train[,c("Store", "DayOfWeek")], 2, as.factor)
但它正在将变量转换为字符。无法弄清楚为什么 - 除了可能的R强制。
'data.frame': 1017209 obs. of 2 variables:
$ Store : chr "1" "2" "3" "4" ...
$ DayOfWeek : chr "5" "5" "5" "5" ...
当我单独使用vars(而不是使用apply)时,它可以工作。感谢
答案 0 :(得分:6)
mtcars[,c('cyl','vs')] <- lapply(mtcars[,c('cyl','vs')],as.factor)
> str(mtcars)
'data.frame': 32 obs. of 11 variables:
$ mpg : num 21 21 22.8 21.4 18.7 18.1 14.3 24.4 22.8 19.2 ...
$ cyl : Factor w/ 3 levels "4","6","8": 2 2 1 2 3 2 3 1 1 2 ...
$ disp: num 160 160 108 258 360 ...
$ hp : num 110 110 93 110 175 105 245 62 95 123 ...
$ drat: num 3.9 3.9 3.85 3.08 3.15 2.76 3.21 3.69 3.92 3.92 ...
$ wt : num 2.62 2.88 2.32 3.21 3.44 ...
$ qsec: num 16.5 17 18.6 19.4 17 ...
$ vs : Factor w/ 2 levels "0","1": 1 1 2 2 1 2 1 2 2 2 ...
$ am : num 1 1 1 0 0 0 0 0 0 0 ...
$ gear: num 4 4 4 3 3 3 3 4 4 4 ...
$ carb: num 4 4 1 1 2 1 4 2 2 4 ...
是错误的工具。 “apply”方法是使用apply
,因为数据框是列表,其中每列都是列表的元素:
apply
一般情况下,在数据框架上使用DataFrame
时要小心谨慎。 axis=
文档的第一行清楚地表明,它所做的第一件事就是将它的参数强制转换为矩阵,而矩阵只能保存一种类型的数据。因此,您的数据框将立即转换为所有数字,所有整数,所有字符,具体取决于其中的内容。
答案 1 :(得分:0)
如上所述,lapply是正确的工具。您可以使用dplyr和mutate_each执行此任务以及许多类似的列转换,如下所示:
library(dplyr)
train <- train %>% mutate_each(funs(as.factor), c(Store, DayOfWeek))