as.factor不将整数转换为因子

as.factor不将整数转换为因子,r,apply,R,Apply,我现在正在自学。我正试图用下面的方法将整数变量转换成分类变量 train[, c("Store", "DayOfWeek")] <- apply(train[,c("Store", "DayOfWeek")], 2, as.factor) 当我单独对变量执行此操作(而不是使用apply)时,它会起作用。谢谢应用是错误的工具。“应用”方法是使用lappy,因为数据帧是列表,其中每列都是列表的一个元素: mtcars[,c('cyl','vs')] <- lapply(mtcars[,

我现在正在自学。我正试图用下面的方法将整数变量转换成分类变量

train[, c("Store", "DayOfWeek")] <- apply(train[,c("Store", "DayOfWeek")], 2, as.factor)

当我单独对变量执行此操作(而不是使用apply)时,它会起作用。谢谢

应用
是错误的工具。“应用”方法是使用
lappy
,因为数据帧是列表,其中每列都是列表的一个元素:

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 ...
mtcars[,c('cyl','vs')]str(mtcars)
“data.frame”:32 obs。在11个变量中:
$mpg:num2122.821.418.718.1144.324.422.819.2。。。
$cyl:系数w/3级别“4”、“6”、“8”:2 2 3 1 2。。。
$disp:num 160 108 258 360。。。
$hp:num 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.51718.619.417。。。
$vs:系数w/2级“0”,“1”:1 2 1 2。。。
$am:num 11 0 0 0 0 0 0。。。
$gear:num 4 4 3 3 3 4 4 4 4。。。
$carb:num 4 1 2 1 4 2 4。。。

通常,在数据帧上使用
apply
时要谨慎。
apply
文档的第一行清楚地表明,它所做的第一件事是将其参数强制为矩阵,而矩阵只能保存一种类型的数据。因此,您的数据帧将立即转换为所有数字、所有整数、所有字符,具体取决于其中的内容。

如上所述,Lappy是正确的工具。您可以将dplyr和mutate_分别用于此任务和许多类似的列转换,如下所示:

library(dplyr)
train <- train %>% mutate_each(funs(as.factor), c(Store, DayOfWeek))
库(dplyr)
每个序列的变异百分比(funs(因子),c(商店,星期日))

train$Store@MichaelChirico时会发生什么,当我单独做时,它会起作用。对我来说,即使单独做也不起作用。
library(dplyr)
train <- train %>% mutate_each(funs(as.factor), c(Store, DayOfWeek))