R: использование функции ifelse для нечисловых значений - PullRequest
0 голосов
/ 02 июля 2018

У меня возникли проблемы с использованием опции ifelse. Я хочу использовать эту функцию для того, чтобы сделать множественную линейную регрессию. У меня большой набор данных, и большинство данных - "NA", а некоторые другие слова. Идея состоит в том, чтобы иметь NA = 0, а если нет NA, то оно должно быть равно 1. Итак, я сделал:

dsp = ifelse (sp == "NA", 0, 1)

Но когда я печатаю dsp: я вижу, что значения, отличные от NA, меняются на 1, но значения NA не изменяются на 0 и остаются такими же.

Я пробовал функцию is.na(), затем я получаю FALSE для значений NA и TRUE для значений не-NA. Я пробовал ifelse( dsp == "False", 0, 1), но у меня тот же результат, что и dsp = ifelse (sp == "NA", 0, 1)

Есть идеи о том, что мне делать?

Спасибо за вашу помощь:)

Ответы [ 2 ]

0 голосов
/ 02 июля 2018

Если я вас правильно понял, вы хотите заменить все NA в векторе на 0, а если есть значение 1.

как сказал @Maurits Evers, вы можете сделать это так:

require(tidyverse)

df %>% 
  mutate(x = ifelse(is.na(x), 0, 1))

Кроме того, вы можете получить тот же результат, используя case_when:

df %>% 
  mutate(x = case_when(
    is.na(x) ~ 0,
    TRUE ~ 1))

Кроме того, вы можете сделать это с помощью базы R:

df[which(abs(df$x) >= 0), ] <- 1
df$x[is.na(df$x), ] <- 0

Как предполагает @Tino, другой вариант базового R может использовать transform() и ifelse().

transform(df, x = ifelse(is.na(x), 0, 1))

образец набора данных:

df <- data.frame(x = c(NA, 1, 2, NA, 3))
0 голосов
/ 02 июля 2018

Просто добавьте еще одну строку кода ниже исходного кода, и она должна работать:

dsp = ifelse (sp == "NA", 0, 1)
dsp[is.na(dsp)]<-0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...