Я сделал функцию с именем my_title()
, которая пытается сопоставить каждое имя в title$Name
, чтобы найти совпадение, где он вернет заголовок с этим именем, если он является одним из рассмотренных заголовков, или "Другой", если онне.
name_exp <- c("Miss.", "Mrs.", "Mr.", "Master.", "Dr.", "Rev.")
my_title <- function(x){
i <- 1
for(i in 1:length(name_exp)){
full_name <- paste(name_exp[i])
name_check <- grepl(x, pattern=full_name)
if(name_check=="TRUE"){
nmatches <- gregexpr(pattern=full_name, text=x[name_check])
finalnames <- regmatches(x[[name_check]], nmatches)
return(finalnames)
}
else{
if(i==6 & name_check=="FALSE"){
return("Other")
}
else{
i <- i+1
}
}
}
}
Однако следующим шагом является создание нового столбца в кадре данных titanic$Title
, где каждый соответствует соответствующему выводу функции.Я использовал sapply()
, но возвращаемое значение представляет собой список, а не вектор символов.В идеале titanic$Title[1]
вернул бы заголовок "Мистер"а не <chr [1]>
.
Я пытался использовать unlist()
, но получаю ошибки.Не уверен, что делать дальше, спасибо!
titanic$Title <- sapply(titanic$Name, my_title)
titanic[sample(1:nrow(titanic),10),c("Title","Name")]
, поэтому, когда я проверяю это, используя вторую строку выше, я получаю это:
Title
<list>
Name
<chr>
792 <chr [1]> Gaskell, Mr. Alfred
570 <chr [1]> Jonsson, Mr. Carl
873 <chr [1]> Carlsson, Mr. Frans Olof
674 <chr [1]> Wilhelms, Mr. Charles
224 <chr [1]> Nenkoff, Mr. Christo
673 <chr [1]> Mitchell, Mr. Henry Michael
198 <chr [1]> Olsen, Mr. Karl Siegwart Andreas
119 <chr [1]> Baxter, Mr. Quigg Edmond
866 <chr [1]> Bystrom, Mrs. (Karolina)
242 <chr [1]> Murphy, Miss. Katherine "Kate"
Запуск head(titanic$Title)
:
$`Braund, Mr. Owen Harris`
[1] "Mr."
$`Cumings, Mrs. John Bradley (Florence Briggs Thayer)`
[1] "Mrs."
$`Heikkinen, Miss. Laina`
[1] "Miss."