根据R中的子字符串创建一个列

时间:2015-12-24 15:02:13

标签: r

我想在另一列中根据广告系列名称在数据框中创建一个具有“移动”和“桌面”值的列,我应该如何做到这一点?

例如:

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

我的数据框大约有2000行。

3 个答案:

答案 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函数中,以便一步完成。