如何在不使用dplyr的情况下将仅字符变量转换为R呢?

时间:2018-10-24 15:43:20

标签: r dataframe

如何在不使用dplyr函数mutate_if的情况下仅将R data.frame中的字符变量转换为因数?我尝试了以下操作,但不起作用:

df <- data.frame(w=c(1, 2, 3), x=c(4, 5, 6), y=c('7', '8', '9'), z=c('10', '11', '12'), stringsAsFactors = F)
str(df)
'data.frame':   3 obs. of  4 variables:
 $ w: num  1 2 3
 $ x: num  4 5 6
 $ y: chr  "7" "8" "9"
 $ z: chr  "10" "11" "12"

df[sapply(df, is.character)] <- sapply(df[sapply(df, is.character)], as.factor)
str(df)
'data.frame':   3 obs. of  4 variables:
 $ w: num  1 2 3
 $ x: num  4 5 6
 $ y: chr  "7" "8" "9"
 $ z: chr  "10" "11" "12"

1 个答案:

答案 0 :(得分:0)

使用mutate_if

更容易
df %>%
   mutate_if(is.character, factor)

在OP的代码中,他们使用了sapply,它将转换为matrix,并且矩阵只能容纳一个类。最好使用lapply

i1 <- sapply(df, is.character)
df[i1] <- lapply(df[i1], factor)