`dmap_if`和'model.matrix'在一起

时间:2016-06-22 14:02:40

标签: r do.call model.matrix purrr one-hot-encoding

我正在使用Arthritis包中的vcd数据集执行一次热编码。我想一起使用purrr::dmap_ifMatrix::model.matrix来做到这一点。我跑的时候

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

工作正常。

当我使用下面的代码不能正常工作

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

1 个答案:

答案 0 :(得分:1)

据我所知,dmap_if一次遍历数据集的列,因此看起来不一定是此任务的正确工具。

如果您想在应用函数之前仅使用因子变量,请考虑keep。使用keep选择因子变量后,您可以使用invoke来应用model.matrixinvoke函数只是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
...