Преобразование кода из базы R в dplyr, в частности, добавление переменной - PullRequest
0 голосов
/ 19 октября 2019

Я пытаюсь добавить новую переменную с именем "state_color" к набору данных "birth_data". Я хочу упростить мой код с помощью dplyr, но я не уверен, как его преобразовать. Я знаю, что в базе R это будет выглядеть так:

red <- c("AK","ID","KS","NE","ND","OK","UT","WY","TX","AL","MS","SC","MT","GA","MO","LA","TN","AK","KY","AZ","WV") 
purple <- c("NC","VA","FL","OH","CO","NV","IN","IA","NM")
blue <- c("NH","PA","CA","MI","IL","MA","DE","NJ","CT","VT","ME","WA","OR","WI","NY","MA","RI","HI","MN","DC")
#assigning states to their respective color

birth_data$state_color[birth_data$state %in% red] <- "red"
birth_data$state_color[birth_data$state %in% purple] <- "purple"
birth_data$state_color[birth_data$state %in% blue] <- "blue"
head(birth_data)

Я пытаюсь сделать то же самое с dplyr

red <- c("AK","ID","KS","NE","ND","OK","UT","WY","TX","AL","MS","SC","MT","GA","MO","LA","TN","AK","KY","AZ","WV") 
purple <- c("NC","VA","FL","OH","CO","NV","IN","IA","NM")
blue <- c("NH","PA","CA","MI","IL","MA","DE","NJ","CT","VT","ME","WA","OR","WI","NY","MA","RI","HI","MN","DC")
#assigning states to their respective color

birth_data %>%
  mutate(state_color <- c("red","purple","blue"))

, но затем получаю ошибку

Ошибка: столбец state_color <- c("red", "purple", "blue") должен иметь длину 1103629 (количество строк) или один, а не 3

Что я делаю не так?

Ответы [ 3 ]

4 голосов
/ 19 октября 2019

Вы хотите начать с набора данных, изменить его, чтобы создать новый столбец, но затем использовать case_when. Значение TRUE используется в случае сбоя во всех случаях.

red <- c("AK","ID","KS","NE","ND","OK","UT","WY","TX","AL","MS","SC","MT","GA","MO","LA","TN","AK","KY","AZ","WV") 
purple <- c("NC","VA","FL","OH","CO","NV","IN","IA","NM")
blue <- c("NH","PA","CA","MI","IL","MA","DE","NJ","CT","VT","ME","WA","OR","WI","NY","MA","RI","HI","MN","DC")

birth_data %>%
   mutate(state_color =case_when(
       state %in% red  ~ "red",
       state %in% purple  ~ "purple",
       state %in% blue  ~ "blue",
       TRUE ~ "no color"
  ))
0 голосов
/ 19 октября 2019

Вам также следует заглянуть в , если вы хотите расширить базу:

library(data.table)

dt_states <- data.table(state = state.abb)

dt_states[state %in% red, state_color := 'red']
dt_states[state %in% blue, state_color := 'blue']
dt_states[state %in% purple, state_color := 'purple']

dt_states
0 голосов
/ 19 октября 2019

Попробуйте это:

birth_data%>% mutate (state_color = if_else (state% в% red, "red", if_else (state% в% purple, "purple", "blue"))

...