2017-01-26 5 views
0

私は要因に変えようとしているデータフレームを持っています。私は、値が表示される順序でレベルが並べられた、各行が要素を表すようにします。私のコードは、この最後のタスクの短い落下さ:複数の要因を作成するときに一意のレベルを指定します

> 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 

レベルは(それが最初のように形質転換したコマンドパイプ)初期データフレームの各列の一致しなければならないことを指定するにはどのような方法があります。今のところ、各要素のレベルは同じで、間違っています。

+2

あなたは(X%>%T%>%as.data.frame '使用することができます)%>%mutate_all(低速運行(因子(、。レベル=ユニーク(。)))))%>%lapply(。、unlist) ' – akrun

+2

@akrun、それは完璧です。私は今、タイトルで私自身の質問にほとんど答えました!また、 '' tidyverse'すなわちX%>% T%>% as.data.frame()%>% mutate_all含むことができる – Visser

答えて

2

あなたはfactor()levels =引数を指定する必要があります。

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 
+1

(低速運行(因子(。、レベル=ユニークを(。))))% >% lapply(。、unlist) ' – akrun

関連する問題