2016-06-22 2 views
0

Я использую Arthritis набор данных от vcd пакет для выполнения одного горячего кодирования. Я хотел бы использовать purrr::dmap_if и Matrix::model.matrix вместе для этого. Когда я запускаю`dmap_if` и 'model.matrix' вместе

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

работающий отлично.

Когда я использую ниже код не работает

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

Как насчет 'держать' и' вызывать' вместо 'dmap_if'? 'Arthritis%>% keep (is.factor)%>% invoke (model.matrix, Improved ~., Data =.)'. Функция 'invoke' - это просто обертка вокруг' do.call', чтобы упростить ее использование в трубе. – aosmith

+0

Спасибо, не могли бы вы мне помочь, как получить все уровни, без перехвата. Он отбрасывает один уровень для каждой переменной. – BigDataScientist

+0

Вы можете удалить перехват, используя '-1' в формуле' model.matrix'. Однако это, вероятно, еще не совсем то, что вы хотите. Вы можете задать новый вопрос конкретно о том, как получить то, что вы хотите от 'model.matrix' (или, в более общем плане, вопрос о том, какой результат вам нужен и почему). – aosmith

ответ

1

Из того, что я могу сказать, dmap_if идет через колонки набора данных одного за раз, и поэтому не обязательно выглядеть как правильный инструмент для выполнения этой задачи ,

Если вы хотите использовать только фактор-переменные перед применением функции, рассмотрите 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 
... 
Смежные вопросы