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

Removing everything after a character in a column in R

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

我有一个数据集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

我希望我的新数据是:

new.data

BABY      MOM      LANDING
mark      dina     www.example.com/?
tom       becky    www.example.com/?
brad      tina     www.example.com/?

如何告诉 R 删除 my.data$LANDING? 之后的所有内容?

我们可以用sub去掉?后面的字符。我们使用正后向 ((?<=\?).*) 来匹配前面有 ? 的一个或多个字符 (.),并将其替换为 ''.

 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/?

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

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

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

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

  my.data$LANDING <- sub("\?.*","\?",my.data$LANDING)