在R中的给定条件之后,从列'n'字符中删除字符

Ama*_*gia 5 substring r dplyr

我要在'18'之后删除此列中的所有内容

MGL18JUNFUT
NATIONALUM18JUNFUT
NTPC18JUNFUT
ONGC18JUNFUT
PCJEWELLER18JUNFUT
PEL18JUNFUT
PFC18JUNFUT
PIDILITIND18JUNFUT
POWERGRID18JULFUT
PTC18JULFUT
RAYMOND18JULFUT
RBLBANK18JULFUT
RECLTD18JULFUT
RPOWER18JULFUT
MGL18JUN800PE
Run Code Online (Sandbox Code Playgroud)

我希望我的输出看起来像

MGL18JUN
NATIONALUM18JUN
NTPC18JUN
ONGC18JUN
PCJEWELLER18JUN
PEL18JUN
PFC18JUN
PIDILITIND18JUN
POWERGRID18JUL
PTC18JUL
RAYMOND18JUL
RBLBANK18JUL
RECLTD18JUL
RPOWER18JUL
MGL18JUN
Run Code Online (Sandbox Code Playgroud)

我试过以下代码.

output <- sub('(^.*?)18???.*', '' , df$column)
Run Code Online (Sandbox Code Playgroud)

但产出即将来临

8JUNFUT
8JUNFUT
8JUNFUT
8JUNFUT
8JUNFUT
8JUNFUT
8JUNFUT
8JUNFUT
8JUNFUT
8JUNFUT
8JUNFUT
8JUNFUT
8JUNFUT
8JUNFUT
8JUN800PE
Run Code Online (Sandbox Code Playgroud)

与此等效的Excel是.

=LEFT(A1, FIND("18",A1,1) +4)
Run Code Online (Sandbox Code Playgroud)

我尝试过很多其他的选项,比如sub,gregexpr,substr但似乎没什么用

akr*_*run 5

我们可以sub通过捕获字符模式(.*后跟18然后是0到3个字符(.{0,3}或者特别.{3}是组((...))中的3个字符()来更改,并替换\\1为捕获组的反向引用()

sub("^(.*18.{0,3}).*", "\\1", df$column)
Run Code Online (Sandbox Code Playgroud)

要么

sub("^(.*18.{3}).*", "\\1", df$column)
#[1] "MGL18JUN"        "NATIONALUM18JUN" "NTPC18JUN"       "ONGC18JUN"      
#[5] "PCJEWELLER18JUN" "PEL18JUN"        "PFC18JUN"        "PIDILITIND18JUN"
#[9] "POWERGRID18JUL"  "PTC18JUL"        "RAYMOND18JUL"    "RBLBANK18JUL"   
#[13] "RECLTD18JUL"     "RPOWER18JUL"     "MGL18JUN"       
Run Code Online (Sandbox Code Playgroud)

根据OP的评论,如果有多个实例18

v1 <- "PIDILITIND18JUN1180CE"
sub("^(.*?18.{3}).*", "\\1", v1)
Run Code Online (Sandbox Code Playgroud)

它也适用于初始数据

sub("^(.*?18.{3}).*", "\\1", df$column)
#[1] "MGL18JUN"        "NATIONALUM18JUN" "NTPC18JUN"       "ONGC18JUN"      
#[5] "PCJEWELLER18JUN" "PEL18JUN"        "PFC18JUN"        "PIDILITIND18JUN"
#[9] "POWERGRID18JUL"  "PTC18JUL"        "RAYMOND18JUL"    "RBLBANK18JUL"   
#[13] "RECLTD18JUL"     "RPOWER18JUL"     "MGL18JUN"       
Run Code Online (Sandbox Code Playgroud)

数据

df <- structure(list(column = c("MGL18JUNFUT", "NATIONALUM18JUNFUT", 
"NTPC18JUNFUT", "ONGC18JUNFUT", "PCJEWELLER18JUNFUT", "PEL18JUNFUT", 
"PFC18JUNFUT", "PIDILITIND18JUNFUT", "POWERGRID18JULFUT", "PTC18JULFUT", 
"RAYMOND18JULFUT", "RBLBANK18JULFUT", "RECLTD18JULFUT", "RPOWER18JULFUT", 
"MGL18JUN800PE")), .Names = "column", class = "data.frame",
row.names = c(NA, 
-15L))
Run Code Online (Sandbox Code Playgroud)