2017-09-06 6 views
2

大きなデータフレームで作業しています。メモリに操作を書き込むのではなく、パイプでIを実行しようとしています。中間段階で因子レベルをチェックしようとすると、levels関数を使用して問題に遭遇し、問題の原因を誰かが知っているかどうか疑問に思っていました。変数をレベルにパイプすることができません

例:

library(dplyr) 
Data <- data.frame(x = rep(LETTERS[1:5],3), 
        y = sample(1:10,length(x), replace=T)) 

通常の方法では動作します:

levels(Data$x) 
[1] "A" "B" "C" "D" "E" 

それはほとんど私がsapplyを使用している場合に動作します:

Data %>% select(x) %>% sapply(levels) 
    x 
[1,] "A" 
[2,] "B" 
[3,] "C" 
[4,] "D" 
[5,] "E" 

しかし、配管が動作しないとNULLを返します。

Data %>% select(x) %>% levels() 
NULL 

なぜですかData %>% select(x) %>% levels()返信NULL

パイプでデータにレベルを使用する方法はありますか?

答えて

5

selectはデータフレームを与えますが、levelsはベクトルを引数として想定しています。そのため、それらは一緒に動作しません。 pipelevelsを使用するには:

を次のいずれかのレベルの方法で列を抽出するために.$xを使用することができます。

Data %>% select(x) %>% {levels(.$x)} 
# [1] "A" "B" "C" "D" "E" 

またはより良いアプローチの使用をpull代わりにselectpullはベクトル/因子として列を与えます:

Data %>% pull(x) %>% levels() 
# [1] "A" "B" "C" "D" "E" 
+1

パーフェクト!ありがとうございました! – JLC

+0

上記の方法のいずれかを使用して2つの変数をレベルに渡す方法はありますか? – JLC

+0

私はそうは思わない。複数の変数がある場合は、適切なアプローチであるようにlapplyを選択します。 – Psidom

関連する問題