我有一个数据框,我试图转化为因素。我希望每行代表一个因子,其中的级别按值显示的顺序排序。我的代码没有完成上一个任务:
> 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
有没有办法指定级别应该与初始数据帧中每列的另一个匹配(它被转换为第一个管道命令);现在每个因素具有相同的水平顺序,这是不正确的。
答案 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