将数据框列转换为因子

时间:2015-10-26 13:47:35

标签: r apply lapply

我只想将数据帧的两列转换为因子。 我使用apply函数,但结果是字符,而不是因素。 知道我做错了吗?

aa <- c(1,2,3,4)
bb <- c(6,7,8,9)
xx <- data.frame(aa, bb)
xx

yy <- apply(xx, 2, function(xx) as.factor(xx))
#      aa  bb 
# [1,] "1" "6"
# [2,] "2" "7"
# [3,] "3" "8"
# [4,] "4" "9"

当我将它实现为独立的向量时,它可以工作:

nn <- c(1,2,3,4)
mm <- as.factor(nn)
mm

3 个答案:

答案 0 :(得分:2)

apply通常不适用于data.frames,因为它返回一个矩阵。您可以改为使用lapply

yy <- data.frame(lapply(xx, as.factor))
str(yy)
#'data.frame':  4 obs. of  2 variables:
# $ aa: Factor w/ 4 levels "1","2","3","4": 1 2 3 4
# $ bb: Factor w/ 4 levels "6","7","8","9": 1 2 3 4

我假设你意识到你也可以做到

xx <- data.frame(aa = as.factor(aa), bb = as.factor(bb))

答案 1 :(得分:1)

我会做类似的事情:

library(dplyr)
yy = xx %>% mutate_each(funs(as.factor))

这会将as.factor应用于xx中的每一列。

答案 2 :(得分:0)

或者你可以做到

error: no matching function for call to ‘parse(picojson::value&, __gnu_cxx::__normal_iterator<char*, std::basic_string<char, std::char_traits<char>, std::allocator<char> > >, __gnu_cxx::__normal_iterator<char*, std::basic_string<char, std::char_traits<char>, std::allocator<char> > >)’

note: candidates are: std::string picojson::parse(picojson::value&, Iter&, const Iter&) [with Iter = __gnu_cxx::__normal_iterator<char*, std::basic_string<char, std::char_traits<char>, std::allocator<char> > >]