r - 在固定字符位置之前提取字符串
问题描述
这是一个相当简单的问题,我尝试了多种组合,但是我没有达到我想要实现的目标。我有一个列,其中的语句用“-”分隔。我想从四月份提取第四个“-”之前的单词。
我正在使用此代码修剪第 4 个“-”之前的部分,并返回之后剩下的任何内容。
data$newCol1 <- NA
data$newCol1 <- ifelse(data$date >= as.Date("2019-04-01"), sub(".?-.?-.?-.?-", "", data$Email), ifelse(data$date <= as.Date("2019-03-31"),data$Email,data$newCol1))
但是我想提取第 4 个“-”之前的部分,例如,如果我的字符串“19Q1-XYZ-JA-All-OutR-random-key-March”我只想要 19Q1-XYZ-JA-All 而不是 OutR -random-key-March 这是我目前得到的
这是我的数据集
Email date
18Q4-ABC-SEA-CO-TM 1/8/2019
19Q1-DEF-ABJPODTSST 1/16/2019
19Q1-ABC-CMJ 2/8/2019
19Q1-APC-CORP 4/9/2019
19Q1-XYZ-ALP-SEA-MOO ABc_1 5/13/2019
19Q1-WXY-All-SF- Coral 01_24 1/27/2019
19Q1-XYZ-All-SF-Tokyo SF Event 03_14 FINAL Send 3/14/2019
19Q1-XYZ-CN-All-cra-foo world-2901 1/30/2019
19Q1-XYZ-CN-All-get-foo world-2901 1/31/2019
19Q1-XYZ-CN-All-opc-foo world-2901 7/31/2019
19Q1-XYX-FI-AC-DEC-kites 1/21/2019
19Q1-XYZ-JA-All-OutR-random-key-March 7/19/2019
19Q1-XYZ-JA-All-OutR-random-key-March 6/19/2019
19Q1-XYZ-JA-SF-OutR-RFC_ABS-key-March 3/29/2019
19Q1-XYZ-unavailable-random-key-balaji 4/20/2019
解决方案
一个选项是匹配-
后面不是 a 的 3 组字符和不是( )-
的下一组字符,作为一个组捕获并替换为该捕获组的反向引用 ( )-
[^-]+
\\1
data$date <- as.Date(data$date, "%m/%d/%Y")
data$newCol1 <- NA
data$newCol1 <- ifelse(data$date >= as.Date("2019-04-01"),
sub("^(([^-]+-){3}[^-]+)-.*", "\\1", data$Email),
ifelse(data$date <= as.Date("2019-03-31"),data$Email,data$newCol1))
数据
data <- structure(list(Email = c("18Q4-ABC-SEA-CO-TM", "19Q1-DEF-ABJPODTSST",
"19Q1-ABC-CMJ", "19Q1-APC-CORP", "19Q1-XYZ-ALP-SEA-MOO ABc_1",
"19Q1-WXY-All-SF- Coral 01_24", "19Q1-XYZ-All-SF-Tokyo SF Event 03_14 FINAL Send",
"19Q1-XYZ-CN-All-cra-foo world-2901", "19Q1-XYZ-CN-All-get-foo world-2901",
"19Q1-XYZ-CN-All-opc-foo world-2901", "19Q1-XYX-FI-AC-DEC-kites",
"19Q1-XYZ-JA-All-OutR-random-key-March", "19Q1-XYZ-JA-All-OutR-random-key-March",
"19Q1-XYZ-JA-SF-OutR-RFC_ABS-key-March", "19Q1-XYZ-unavailable-random-key-balaji"
), date = c("1/8/2019", "1/16/2019", "2/8/2019", "4/9/2019",
"5/13/2019", "1/27/2019", "3/14/2019", "1/30/2019", "1/31/2019",
"7/31/2019", "1/21/2019", "7/19/2019", "6/19/2019", "3/29/2019",
"4/20/2019")), class = "data.frame", row.names = c(NA, -15L))
推荐阅读
- excel - 通过 VBA 将工作表中的图像添加到电子邮件
- mysql - 仅检索范围之间每个组的最后一条记录
- dropdown - 需要将此代码转换为 ng-multiselect 下拉菜单
- php - Laravel 8 数据库不会使用 HTML 表单更新
- python - 使用 group by 的 Pandas 百分比变化
- android - 如何在不使应用程序崩溃的情况下使用 ViewPager2
- scala - 播放框架如何在启用 tls 的情况下使用 redis 作为缓存服务器
- r - 当我在图中使用简化时绘制图形的问题
- pine-script - 如何绘制以前的枢轴点线?
- javascript - 如何在 Javascript 中的音频标签上创建事件侦听器?