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

时间:2015-08-05 15:30:15

标签: 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

我希望我的新数据是:

new.data

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

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

1 个答案:

答案 0 :(得分: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/?

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

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

在这里,我们匹配所有不是?[^?]+)后跟?\\?)的字符,并使用括号作为一组进行捕获({{1 }}),我们将其余字符留在组中(([^?]+\\?))。

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

\\?