Как изменить да / нет в столбце на 1 и 0 - PullRequest
3 голосов
/ 04 мая 2019

У меня есть столбец в R с Да и Нет, и мне нужно преобразовать нет в 0 и да в 1 Пока у меня есть

clean %>% mutate(flight=ifelse(flight=="NO", 0,1)) 

Однако, оказывается, что некоторые значения - это «N», «n» или «нет», которые все конвертируются в 1. Как я могу также преобразовать все эти варианты в 0?

Ответы [ 4 ]

3 голосов
/ 04 мая 2019

Если нам нужно преобразовать несколько значений «N», «n», «no», «NO» и все остальные как «Да» в 0 и 1, получите первый символ с substr, измените его на верхнийcase (toupper, сделать сравнение (!=) с "N" и привести его к двоичному (as.integer)

library(dplyr)
clean %>%
       mutate(flight = as.integer(toupper(substr(flight, 1, 1)) != "N"))

ПРИМЕЧАНИЕ. Предположим, что есть только "Да", "НЕТ""," нет "," N "," n "в качестве значений в столбце

данные

clean <- tibble(flight = c("No", "Yes", "YES", "Y", "no",
      "No", "NO", "Y", "n", "y", "No"))
2 голосов
/ 04 мая 2019

Использовать условные | в grepl() поиске

library(tidyverse)

clean <- 
  tibble(
    flight = 
      c("No", "Yes", "YES", "Y", "no", "No", "NO", "Y", "n", "y", "No"))

clean %>% 
  mutate(
    flight = 
      ifelse(
        test = grepl(pattern = "N|n", x = flight), 
        yes = 0, 
        no = 1))

1 голос
/ 04 мая 2019

Используя примеры данных из @akrun, различные возможности dplyr и grepl() могут быть:

clean %>%
 mutate(temp = (!grepl("n",  flight, ignore.case = TRUE)) * 1)

   flight
    <int>
 1      0
 2      1
 3      1
 4      1
 5      0
 6      0
 7      0
 8      1
 9      0
10      1
11      0

Или то же самое только с base R:

clean$flight <- (!grepl("n",  clean$flight, ignore.case = TRUE)) * 1

Или:

clean %>%
 mutate(flight = as.integer(!grepl("n", flight, ignore.case = TRUE)))

Или то же самое с базой R:

clean$flight <- as.integer(!grepl("n",  clean$flight, ignore.case = TRUE))
1 голос
/ 04 мая 2019

Вместо substr вы также можете использовать startswith следующим образом:

library(dplyr)
clean <- tibble(flight = c("No", "Yes", "YES", "Y", "no",
                           "No", "NO", "Y", "n", "y", "No"))
clean %>% mutate(flight = as.integer(x = startsWith(tolower(flight), "y")))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...