罗兰的答案对于这个具体问题来说非常好,但我想我会分享一个更通用的方法。
DF <- data.frame(x = letters[1:5], y = 1:5, z = LETTERS[1:5],
stringsAsFactors=FALSE)
str(DF)
# 'data.frame': 5 obs. of 3 variables:
# $ x: chr "a" "b" "c" "d" ...
# $ y: int 1 2 3 4 5
# $ z: chr "A" "B" "C" "D" ...
## The conversion
DF[sapply(DF, is.character)] <- lapply(DF[sapply(DF, is.character)],
as.factor)
str(DF)
# 'data.frame': 5 obs. of 3 variables:
# $ x: Factor w/ 5 levels "a","b","c","d",..: 1 2 3 4 5
# $ y: int 1 2 3 4 5
# $ z: Factor w/ 5 levels "A","B","C","D",..: 1 2 3 4 5
对于转换,赋值的左侧 (DF[sapply(DF, is.character)]
) 对字符列进行子集化。在右侧,对于该子集,您使用lapply
执行您需要执行的任何转换。 R 足够聪明,可以用结果替换原始列。
这样做的方便之处在于,如果您想采用其他方式或进行其他转换,只需在左侧更改您要查找的内容并在右侧指定您想要将其更改为的内容即可。