创建多个因子时指定唯一级别

时间:2017-01-26 10:32:35

标签: r r-factor

我有一个数据框,我试图转化为因素。我希望每行代表一个因子,其中的级别按值显示的顺序排序。我的代码没有完成上一个任务:

> x
   V11 V12 V13 V21 V22 V23 V31 V32 V33 V41 V42 V43
r1   1   2   3   4   5   6   7   8   9  10  11  12
r2   1   2   3   4   5   6  10  11  12   7   8   9
r3   1   2   3   7   8   9  10  11  12   4   5   6
r4   4   5   6   7   8   9  10  11  12   1   2   3
> 
> x %>%
+   t %>%
+   as_data_frame %>%
+   mutate_all(factor) %>%
+   lapply(., unlist)
$r1
 [1] 1  2  3  4  5  6  7  8  9  10 11 12
Levels: 1 2 3 4 5 6 7 8 9 10 11 12

$r2
 [1] 1  2  3  4  5  6  10 11 12 7  8  9 
Levels: 1 2 3 4 5 6 7 8 9 10 11 12

$r3
 [1] 1  2  3  7  8  9  10 11 12 4  5  6 
Levels: 1 2 3 4 5 6 7 8 9 10 11 12

$r4
 [1] 4  5  6  7  8  9  10 11 12 1  2  3 
Levels: 1 2 3 4 5 6 7 8 9 10 11 12

有没有办法指定级别应该与初始数据帧中每列的另一个匹配(它被转换为第一个管道命令);现在每个因素具有相同的水平顺序,这是不正确的。

1 个答案:

答案 0 :(得分:2)

您需要在levels =

中指定factor()参数
lapply(data.frame(t(df)), function(x) factor(x, levels = unique(x)))
#$r1
# [1] 1  2  3  4  5  6  7  8  9  10 11 12
#Levels: 1 2 3 4 5 6 7 8 9 10 11 12

#$r2
# [1] 1  2  3  4  5  6  10 11 12 7  8  9 
#Levels: 1 2 3 4 5 6 10 11 12 7 8 9

#$r3
# [1] 1  2  3  7  8  9  10 11 12 4  5  6 
#Levels: 1 2 3 7 8 9 10 11 12 4 5 6

#$r4
# [1] 4  5  6  7  8  9  10 11 12 1  2  3 
#Levels: 4 5 6 7 8 9 10 11 12 1 2 3