删除R中列中字符后的所有内容

All*_*Kat 7 r character

我需要删除列中问号后面的所有内容.

我有一个数据集EX:

my.data

BABY      MOM      LANDING
mark      dina     www.example.com/?kdvhzkajvkadjf
tom       becky    www.example.com/?ghkadkho[qeu
brad      tina     www.example.com/?klsdfngal;j
Run Code Online (Sandbox Code Playgroud)

我希望我的新数据是:

new.data

BABY      MOM      LANDING
mark      dina     www.example.com/?
tom       becky    www.example.com/?
brad      tina     www.example.com/?
Run Code Online (Sandbox Code Playgroud)

如何让R后,除去一切?my.data$LANDING

akr*_*run 11

我们可以sub用来删除后面的字符?.我们使用一个正的lookbehind((?<=\\?).*)匹配一个或多个.前面的字符()?并替换它''.

 my.data$LANDING <- sub('(?<=\\?).*$', '', my.data$LANDING, perl=TRUE)
 my.data
 #  BABY   MOM       LANDING
 #1 mark  dina www.example.com/?
 #2  tom becky www.example.com/?
 #3 brad  tina www.example.com/?
Run Code Online (Sandbox Code Playgroud)

或者另一种选择是使用capture groups然后用捕获组(\\1)替换第二个参数.

 my.data$LANDING <- sub('([^?]+\\?).*', '\\1', my.data$LANDING)
Run Code Online (Sandbox Code Playgroud)

在这里,我们匹配所有不是?([^?]+)后跟?(\\?)的字符,并使用括号捕获为group(([^?]+\\?)),我们将其余字符留在group(.*)中.

或者如评论中提到的@Frank,我们可以匹配?其余的字符(.*),并将其替换\\?为第二个参数.

  my.data$LANDING <- sub("\\?.*","\\?",my.data$LANDING)
Run Code Online (Sandbox Code Playgroud)

  • 您可以使用空白字符串替换查询,而不是lookbehind:`sub("\\?.*","\\?",my.data $ LANDING)` (2认同)