我想在另一列中根據Campaign Name的值在「Mobile」和「Desktop」中創建一個數據框中的列,我應該如何做到這一點?根據R中的子字符串創建一個列
例如:
Campaign Device
Branded-Desktop-Campaign1 Desktop
Branded-Mobile-Campaign2 Mobile
我的數據幀有大約2000行。
我想在另一列中根據Campaign Name的值在「Mobile」和「Desktop」中創建一個數據框中的列,我應該如何做到這一點?根據R中的子字符串創建一個列
例如:
Campaign Device
Branded-Desktop-Campaign1 Desktop
Branded-Mobile-Campaign2 Mobile
我的數據幀有大約2000行。
假設你正在處理的是這樣的:
x <- c("Branded-Desktop-Campaign1", "Branded-Mobile-Campaign2")
嘗試:
gsub(".*-(.*)-.*", "\\1", x)
## [1] "Desktop" "Mobile"
我們可以使用sub
。我們匹配模式中的一個或多個字符,然後 - (.*-
),然後將一個或多個不是-
([^-]+
)的字符作爲一組捕獲。在替換中,我們使用反向引用。
sub('.*-([^-]+)-.*', '\\1', df1$Campaign)
#[1] "Desktop" "Mobile"
或者我們可以使用stri_extract_first
從stringi
library(stringi)
stri_extract_first_regex(df1$Campaign, '(?<=\\-)\\w+')
#[1] "Desktop" "Mobile"
謝謝Akrun,這非常有幫助,解決了我的問題。 – Izzy
您可以使用正則表達式來尋找關鍵字在你的Campaing字符串,並使用該結果來構建你的「設備」欄:
library(dplyr)
df %>%
mutate(mobile = grepl("Mobile", Campaign),
desktop = grepl("Desktop", Campaign),
Device = ifelse(mobile, "Mobile", "Desktop"))
當然,您可以直接將正則表達式放入ifelse函數中,一步完成。
感謝您的回答,這很有幫助。 – Izzy
「Campaign」列中是否有任何圖案?如果它總是出現在第一個'-'之後,那麼'sub('。* - ([^ - ] +) - 。*','\\ 1',df1 $ Campaign) – akrun