2015-12-24 37 views
2

我想在另一列中根據Campaign Name的值在「Mobile」和「Desktop」中創建一個數據框中的列,我應該如何做到這一點?根據R中的子字符串創建一個列

例如:

Campaign       Device 
Branded-Desktop-Campaign1  Desktop 
Branded-Mobile-Campaign2   Mobile 

我的數據幀有大約2000行。

+0

「Campaign」列中是否有任何圖案?如果它總是出現在第一個'-'之後,那麼'sub('。* - ([^ - ] +) - 。*','\\ 1',df1 $ Campaign) – akrun

回答

3

假設你正在處理的是這樣的:

x <- c("Branded-Desktop-Campaign1", "Branded-Mobile-Campaign2") 

嘗試:

gsub(".*-(.*)-.*", "\\1", x) 
## [1] "Desktop" "Mobile" 
2

我們可以使用sub。我們匹配模式中的一個或多個字符,然後 - (.*-),然後將一個或多個不是-[^-]+)的字符作爲一組捕獲。在替換中,我們使用反向引用。

sub('.*-([^-]+)-.*', '\\1', df1$Campaign) 
#[1] "Desktop" "Mobile" 

或者我們可以使用stri_extract_firststringi

library(stringi) 
stri_extract_first_regex(df1$Campaign, '(?<=\\-)\\w+') 
#[1] "Desktop" "Mobile" 
+1

謝謝Akrun,這非常有幫助,解決了我的問題。 – Izzy

0

您可以使用正則表達式來尋找關鍵字在你的Campaing字符串,並使用該結果來構建你的「設備」欄:

library(dplyr) 
df %>% 
    mutate(mobile = grepl("Mobile", Campaign), 
      desktop = grepl("Desktop", Campaign), 
      Device = ifelse(mobile, "Mobile", "Desktop")) 

當然,您可以直接將正則表達式放入ifelse函數中,一步完成。

+0

感謝您的回答,這很有幫助。 – Izzy

相關問題