在字符匹配和年份之后对语句进行子字符串化

Substring a statement after character matching and year

我正在尝试从我的数据集中提取基于年份的某些行,此外,我想对符合以下条件的那些行进行子字符串化,对于 2017 年,我想对语句中第二个“-”之前的部分进行子字符串化例如:“17Q4-EMEA-All-SOV-OutR-Sov_Score-18Dec.Email”我只想要 "All-SOV-OutR-Sov_Score-18Dec.Email",对于 2018 年,我想删除“.”之后的部分。例如:“IVP 程序模板.IVP 电子邮件模板”我想要“IVP 程序模板

我试过使用

data$col <- sub(".*:", "", data$`Email Name`)
data$col2 <- substring(data$`Email Name`, regexpr(".", data$`Email Name`) + 1)

但是 none 它正在工作并且 returns 语句原样,也用于基于年份的过滤我尝试使用过滤功能 filter(data, as.Date(data$首先 Activity (EDT)) = "2017") 但它给我语法错误

我的数据集是这样的:

这是应该为您提供 2017 年值所需结果的正则表达式:

sub(".*?-.*?-", "", "17Q4-EMEA-All-SOV-OutR-Sov_Score-18Dec.Email")
# "All-SOV-OutR-Sov_Score-18Dec.Email"

2018 年价值观:

sub("\..*", "", "IVP Program Template.IVP Email Template")
# IVP Program Template

然后您可以使用 ifelse:

应用正则表达式函数
library(lubridate)

data$email_adj <- NA

data$email_adj <- ifelse(year(mdy(data$`First Activity (EDT)`)) %in% "2017", sub(".*?-.*?-", "", data$`Email Name`), data$email_adj)

data$email_adj <- ifelse(year(mdy(data$`First Activity (EDT)`)) %in% "2018", sub("\..*", "", data$`Email Name`), data$email_adj)


如果您想按月而不是年过滤,请使用 year 函数的 month instaed(在示例中我只选择了从四月到七月的月份):

library(lubridate)

data$email_adj <- NA

data$email_adj <- ifelse(month(mdy(data$`First Activity (EDT)`)) %in% 4:7, sub(".*?-.*?-", "", data$`Email Name`), data$email_adj)

data$email_adj <- ifelse(month(mdy(data$`First Activity (EDT)`)) %in% 4:7, sub("\..*", "", data$`Email Name`), data$email_adj)