在没有for循环的情况下更改数据框中多个列的类

Uma*_*mao 0 r dataframe

我想更改R数据框中的多个列的类,而不是一个接一个地更改它,也不要使用for循环(并注意答案)。我可以用这两种方法中的任一种来做,但是它们感到笨拙。请注意,我不一定要更改每一列。

例如我有数据框mydf

mydf <- data.frame("col1" = c(1, 2, 3),
               "col2" = c("a", "b", "c"),
               "col3" = c("a", "a", "b"), stringsAsFactors = FALSE)
Run Code Online (Sandbox Code Playgroud)

我想将第二列和第三列更改为类因子。(实际上,我想处理两个以上的专栏...)

我可以按自己喜欢的方式逐列进行操作,例如:

mydf$col2     <- as.factor(mydf$col2)
mydf[, 3]     <- as.factor(mydf[,3])
Run Code Online (Sandbox Code Playgroud)

或者我可以使用for循环:

 for (i in 2:3{
   mydf[,i] <- as.factor(mydf[,i])
 }
Run Code Online (Sandbox Code Playgroud)

这些工作,但感到笨拙和次优。

更好的主意?

Uma*_*mao 5

好的,我在写问题时就解决了这个问题,但是想出这个问题可能会增加,以防将来被任何人使用:

mydf[,2:3] <- lapply(mydf[,2:3], as.factor)
Run Code Online (Sandbox Code Playgroud)

  • 对于更一般的用法,我认为最好用应转换的列名定义一个向量,例如`factor_cols &lt;-c(“ col2”,“ col3”)`,然后是`mydf [factor_cols] &lt;-lapply( mydf [factor_cols],as.factor)` (5认同)
  • 此解决方案已出现在此处http://stackoverflow.com/a/3798348/3001626的链接问题中 (2认同)