2017-11-11 245 views
0

我對R更新,我正在玩泰坦尼克號的kaggle數據集。我已經觀看了David Langer關於探索這個數據集的很棒的YouTube視頻,並且他能夠用for循環解析每個乘客的頭銜。然而,我忍不住想要用mutate和stringr做一個更簡單的方法。如何使用mutate和ifelse將字符串數據解析爲新變量?

注:titanic.full = data.frame

這是我最好的猜測......顯然它不工作雖然:

mutate(titanic.full, Title = ifelse(str_detect(titanic.full$Name, "Mr."), "Mr.") elseif(str_detect(titanic.full$Name, "Mrs."), "Mrs."), "Other") 

任何指導,將是非常讚賞。

+0

巢'ifelse'。 'ifelse(str_detect(Name,「Mr.」),「Mr.」,ifelse(str_detect(Name,「Mrs.」,「Mrs.」,「Other」))' – Psidom

+0

'case_when'是你的朋友 – dshkol

+0

所以,我試過如下:變異(titanic.full,標題= ifelse(str_detect(名稱, 「先生」), 「先生」,ifelse(str_detect(名稱, 「夫人」), 「太太」,「其他「)),但是這似乎不起作用,因爲出現了一個意外的符號錯誤 –

回答

1

使用正則表達式匹配似乎更容易在這裏。 .*?匹配所有字符,直到後面的第一個匹配項。 (Mr|Mrs|Miss|$)匹配任何與$意味着線的端部(爲了捕獲具有沒有一種現有的任何值的行)的選項。最後.*匹配剩下的任何東西。 "\\1"引用與括號內圖案部分相匹配的字符。

titanic.full %>% mutate(Title = sub(".*?(Mr|Mrs|Miss|$).*", "\\1", Name)) 

注:由於沒有在這個問題重複地提供輸入,我們在這裏提供它:

u <- "https://raw.githubusercontent.com/vincentarelbundock/Rdatasets/master/csv/datasets/Titanic.csv" 
titanic.full <- read.csv(u) 
+0

非常感謝!看起來我試圖避免元字符需要結束,我插入它並工作!現在搜索並閱讀元字符所以我可以申請這個! –

+0

我看到了,非常感謝! –

+0

我已經閱讀了我的正則表達式,發現了一個更方便的方法來捕獲所有未知的標題,我之前沒有包含這些標題: titanic.full < - titanic.full%>% 突變( 「*。?,(+ \\)*」 AllTitles =子( 「\\ 1」,名稱)) –

0

如果你想tidyverse解決方案,您可以執行以下操作:

library(tidyverse) 

df <- "https://raw.githubusercontent.com/vincentarelbundock/Rdatasets/master/csv/datasets/Titanic.csv" 
df <- read.csv(df, stringsAsFactors = FALSE) 
df <- as_tibble(df) 
df 

df %>% 
    extract(Name, 
      "Title", 
      "(Mr|Mrs|Miss) ([^ ]+)", 
      remove = FALSE) %>% 
    select(Name, Title) 

將返回:

# A tibble: 1,313 x 2 
              Name Title 
*           <chr> <chr> 
1     Allen, Miss Elisabeth Walton Miss 
2     Allison, Miss Helen Loraine Miss 
3   Allison, Mr Hudson Joshua Creighton Mr 
4 Allison, Mrs Hudson JC (Bessie Waldo Daniels) Mrs 
5     Allison, Master Hudson Trevor <NA> 
6       Anderson, Mr Harry Mr 
7    Andrews, Miss Kornelia Theodosia Miss 
8      Andrews, Mr Thomas, jr Mr 
9 Appleton, Mrs Edward Dale (Charlotte Lamson) Mrs 
10      Artagaveytia, Mr Ramon Mr 
# ... with 1,303 more rows 

由於G.格羅滕迪克用於提供數據。

相關問題