【问题标题】:Substring a statement after character matching and year字符匹配和年份后的语句子串
【发布时间】:2019-12-24 01:01:44
【问题描述】:

我正在尝试根据年份从我的数据集中提取某些行,此外,我想对符合以下条件的行进行子串化,对于 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)

但它们都不起作用并按原样返回语句,也用于根据我尝试使用过滤器函数的年份进行过滤 filter(data, as.Date(data$First Activity (EDT)) = "2017") 但它给了我语法错误

我的数据集是这样的:

【问题讨论】:

  • 请提供dput(head(df,n))的数据,而不是图片或链接。
  • 请提供预期的输出。
  • 这是我的数据集:structure(list(Email Name = c("IVP 程序模板.IVP 电子邮件模板", "17Q4-​​EMEA-All-SOV-Global Borrowing_5March18.Email”、“17Q4-​​EMEA-All-SOV-OutR-Sov_Score-18Dec.Email”、“17Q4-​​EMEA-All-SOV-Social Housing_8March1.Email”、“17Q4-​​EMEA-Insurance-Personalized.PersonalizedFI&INS”) , First Activity (EDT) = 结构(c(12/19/2017,3/5/2018,12/18/2017, 3/9/2018, 12/14/2017), class= c("POSIXct", "POSIXt " ), tzone = "UTC")), row.names = c(NA, -5L), class= c("tbl_df", "tbl", "data.frame"))
  • edit您的问题添加数据,而不是将其放入评论中。除了非常难以阅读之外,评论框还会解释和格式化您输入的文本,这会改变它并使其无法复制

标签: r substring datefilter


【解决方案1】:

这是应该为您提供 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(在示例中,我只选择了从 4 月到 7 月的月份):

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)


【讨论】:

  • 嗨,这在一年内工作得很好,但实际上我必须在一定数量的几个月内这样做,比如四月到七月。所以我正在做这样的事情 data$newCol First Activity (EDT)) %in% month.name[4:7], ], sub(".*?-.*?-" , "", data$Email Name), data$Email Name) 但是我得到一个错误,你能帮我纠正这个语法吗
  • 我调整了答案来解决这个问题
猜你喜欢
  • 2018-10-02
  • 2021-03-07
  • 1970-01-01
  • 1970-01-01
  • 2023-02-20
  • 2011-02-23
  • 2018-12-20
  • 2018-07-16
  • 1970-01-01
相关资源
最近更新 更多