Как указать определенный пользователем na.actions в dummyVars из пакета Caret в R? - PullRequest
1 голос
/ 20 апреля 2020

Я создаю модель dummyVars и делаю прогноз для различных данных. Если в некотором столбце этих данных содержится NA, то NA также преобразуются в разреженную матрицу. Позвольте мне привести пример.

Предположим, это мое обучение:

customers <- data.frame(
             id=c(10,20,30,40,50),
             gender=c('male','female','female','male','female'),
             mood=c('happy','sad','happy','sad','happy'),
             outcome=c(1,1,0,0,0))

dmy <- dummyVars("~.", data = customers)

Теперь вот мои данные, которые я хочу преобразовать в фиктивные переменные:

customersTest <- data.frame(
                 id=c(1),
                 gender=c('female'),
                 mood=as.factor(c(NA)),
                 outcome=c(1),
                 Stuff = c("bla"))

Если Я предсказываю для этих данных, что я получаю АН во всех состояниях фиктивного настроения:

trsf <- data.frame(predict(dmy, newdata = customersTest))

  > id gender.female gender.male mood.happy mood.sad outcome
  > 1             1           0         NA       NA       1

Я хочу, чтобы эти АН также были равны 0, так как в моих данных нет ни счастливого, ни печального настроения. Поскольку у dummyVars Предиката есть опция na.action, я пытался написать внутри себя некоторую настраиваемую функцию f, которая заменяет все NA на нули. Это, однако, не сработало.

Есть ли способ сделать это через na.action? Опция замены всех NA на нули в результирующем фрейме данных уже используется мной и занимает достаточно ОЗУ для больших наборов данных. Я хотел бы избавиться от этого. Спасибо!

1 Ответ

0 голосов
/ 23 апреля 2020
DF1 = data.frame(C1= c(1, 5, 14, NA, 54), C2= c(9, NA, NA, 3, 42), C3= c(9, 7, 42, 87, NA))
DF1
#>   C1 C2 C3
#> 1  1  9  9
#> 2  5 NA  7
#> 3 14 NA 42
#> 4 NA  3 87
#> 5 54 42 NA

DF1[is.na(DF1)] = 0
DF1
#>   C1 C2 C3
#> 1  1  9  9
#> 2  5  0  7
#> 3 14  0 42
#> 4  0  3 87
#> 5 54 42  0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...