У меня есть следующие данные:
Я хочу создать переменную «TITLE» из «NAME» со значениями MASTER, MISS, MR, MRS И OTHER. MISS, иногда похож на MLLE, а MRS иногда появляется как Ms или MME, используя пакет dplyr.
Я пробовал это:
Title_Master <- titanic2 %>%
filter(str_detect(Name, "Master") & Sex == "male") %>%
mutate(Title = "Master")
Title_Miss <- titanic2 %>%
filter((str_detect(Name, "Miss") | str_detect(Name, "Mmlle")) & Sex ==
"female") %>%
mutate(Title = "Miss")
Title_Mr <- titanic2 %>%
filter(str_detect(Name, "Mr") & Sex == "male") %>%
mutate(Title = "Mr")
Title_Mrs <- titanic2 %>%
filter((str_detect(Name, "Mrs") | str_detect(Name, "Ms") |
str_detect(Name, "Mme")) & Sex == "female") %>%
mutate(Title = "Mrs")
T_Title <- rbind(Title_Master, Title_Miss, Title_Mr, Title_Mrs)
Но я не уверен, что это лучший способ. И я не знаю, как создать значение «OTHER».
Здравствуйте, спасибо за ответ. Я пытаюсь сделать это: titanic2%>% select (Name, Sex)%>% mutate (type = case_when ("Master" & Sex == "male" ~ "Master", ("Miss" | "Mlle" ) & Sex == "женский" ~ "Мисс", "Мистер" & Секс == "мужской" ~ "Мистер" ("Миссис" | "Мисс" | "Мадам") & Sex == "женский" ~ "Миссис "TRUE ~" other ")), но я получаю следующую ошибку: Ошибка: неожиданная числовая константа в:" ("Mrs" | "Ms" | "Mme") & Sex == "female" ~ "Mrs" TRUE "
dplyr::case_when является улучшением по сравнению с несколькими вложенными выражениями ifelse(...).





#Always includes libraries and data set used is important for reproduciblity
library(tidyverse)
library(stringr)
#install.packages("titanic")
library(titanic)
titanic2 <- titanic::titanic_test
titanic2 %>% mutate(Title = case_when(str_detect(Name, "Master") & Sex == "male" ~ "Master",
str_detect(Name, "Miss|Mmlle") & Sex == "female" ~ "Miss",
str_detect(Name, "Mr") & Sex == "male" ~ "Mr",
str_detect(Name, "Mrs|Ms|Mme") & Sex == "female" ~ "Mrs",
TRUE ~ "OTHER")) %>% group_by(Sex, Title) %>% summarise(N=n())
# A tibble: 6 x 3
# Groups: Sex [?]
Sex Title N
<chr> <chr> <int>
1 female Miss 78
2 female Mrs 73
3 female OTHER 1
4 male Master 21
5 male Mr 240
6 male OTHER 5
См. Dplyr :: case_when