as.factor不将整数转换为factor

时间:2015-12-31 17:36:50

标签: r apply

我现在正在教自己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)时,它可以工作。感谢

2 个答案:

答案 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))