如何在不使用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"
答案 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)