批量转换数字到因子

时间:2018-06-06 15:59:43

标签: r

我正在尝试将numericcharacter类变量批量转换为R中的factor。我觉得这应该很简单,但我遇到的问题实际上是因子

我所做的就是:

>sapply(df, class)
    a           b          c
"numeric"   "numeric"  "numeric" 

>col.names <- c("a", "b", "c")
>df[,col.names] <- sapply(df[,col.names], as.factor)

我得到了这个:

>sapply(df, class)
     a            b            c
"character"  "character"  "character"

我试图找出为什么它不会从数字转换为因子,而是转向角色。

通常问题是从因素到数字,所以我还没有找到关于此类问题的任何信息。

4 个答案:

答案 0 :(得分:1)

我想,在这种情况下,sapply()会返回一个矩阵,这不是一个因素。使用

df[,col.names] <- lapply(df[,col.names], as.factor)

因为lapply()会返回将它们插入df的因子列表。

答案 1 :(得分:1)

您必须使用lapply。在下面的示例中,我创建了两个相等的df,包含4列。

df <- df2 <- data.frame(a = 1:5, b = 6:10, c = 11:15, d = 16:20)
col.names <- c("a", "b", "c")

df[,col.names] <- lapply(df[,col.names], as.factor)
sapply(df, class)
#a         b         c         d 
#"factor"  "factor"  "factor" "integer"

请注意,如果要更改整个data.frame,则需要编写方括号df2[]

df2[] <- lapply(df2, as.factor)
sapply(df2, class)
#a        b        c        d 
#"factor" "factor" "factor" "factor"

答案 2 :(得分:0)

尝试类似:

df <- data.frame(sapply(df, as.factor))

不同之处在于它最后将它包含在data.frame中。

答案 3 :(得分:0)

这是一个tidyverse解决方案。

library(tidyverse)

data <- tibble(x = c("blue", "green", y = c(1:2))

data <- data %>%
  mutate(x = factor(x),
         y = factor(y))