我想在另一列中根据广告系列名称在数据框中创建一个具有“移动”和“桌面”值的列,我应该如何做到这一点?
例如:
Campaign Device
Branded-Desktop-Campaign1 Desktop
Branded-Mobile-Campaign2 Mobile
我的数据框大约有2000行。
答案 0 :(得分:3)
假设你正在处理类似的事情:
x <- c("Branded-Desktop-Campaign1", "Branded-Mobile-Campaign2")
尝试:
gsub(".*-(.*)-.*", "\\1", x)
## [1] "Desktop" "Mobile"
答案 1 :(得分:2)
我们可以使用sub
。我们将模式匹配一个或多个字符后跟 - (.*-
),然后将一个或多个不是-
([^-]+
)的字符作为一组捕获。在替换中,我们使用反向引用。
sub('.*-([^-]+)-.*', '\\1', df1$Campaign)
#[1] "Desktop" "Mobile"
或者我们可以使用stri_extract_first
stringi
library(stringi)
stri_extract_first_regex(df1$Campaign, '(?<=\\-)\\w+')
#[1] "Desktop" "Mobile"
答案 2 :(得分:0)
您可以使用正则表达式在“营销字符串”中查找关键字,并使用结果构建“设备”列:
library(dplyr)
df %>%
mutate(mobile = grepl("Mobile", Campaign),
desktop = grepl("Desktop", Campaign),
Device = ifelse(mobile, "Mobile", "Desktop"))
当然,您可以将正则表达式直接放入ifelse函数中,以便一步完成。