2016-06-22 3 views
0

データセットをvcdパッケージから使用して、1つのホットエンコーディングを実行しています。これを行うにはpurrr::dmap_ifMatrix::model.matrixを一緒に使用したいと思います。私が走るとき`dmap_if`と 'model.matrix'を合わせて

do.call(model.matrix, list(Improved~.,Arthritis)) 

うまく動作します。

私はコードの下に使用dmap_ifは1時間のデータセットの列を通過するので、必然的に、このタスクのための適切なツールのように見えるしていませんが、私が言うことができるものから

Arthritis %>% dmap_if(is.factor, do.call(model.matrix, list(Improved~., .))) 
+1

'dmap_if'の代わりに' keep'と 'invoke'はどうですか? '関節炎%>%keep(is.factor)%>%invoke(model.matrix、Improved〜、data =。)'です。 'invoke'関数は' do.call'の周りのラッパーで、パイプで使いやすくなっています。 – aosmith

+0

ありがとう、傍受をせずにすべてのレベルを取得する方法を教えてくれますか?変数ごとに1つのレベルを削除しています。 – BigDataScientist

+0

'model.matrix'の式に' -1'を使ってインターセプトを取り除くことができます。しかし、それはまだあなたが望むものではないでしょう。あなたは 'model.matrix'からあなたが望むものを得る方法(あるいはより一般的には、あなたが必要とする結果とその理由についての質問)を得るための新しい質問を具体的に求めるかもしれません。 – aosmith

答えて

1

が動作していません。

ファクタ変数のみを使用して関数を適用する場合は、keepとしてください。 keepを使用して係数変数だけを選択したら、invokeを使用してmodel.matrixを適用することができます。 invoke関数は、パイプでうまく動作するdo.callのラッパーです。

Arthritis %>% 
    keep(is.factor) %>% 
    invoke(model.matrix, Improved~., data = .) 

    (Intercept) TreatmentTreated SexMale 
1   1    1  1 
2   1    1  1 
3   1    1  1 
4   1    1  1 
5   1    1  1 
6   1    1  1 
7   1    1  1 
8   1    1  1 
9   1    1  1 
10   1    1  1 
11   1    1  1 
12   1    1  1 
13   1    1  1 
14   1    1  1 
15   1    1  0 
16   1    1  0 
... 
関連する問題