【问题标题】:Removing everything after a character in a column in R删除R中列中字符之后的所有内容
【发布时间】:2015-08-05 15:30:14
【问题描述】:

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

我有一个数据集 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 之后的所有内容?

【问题讨论】:

    标签: r character


    【解决方案1】:

    我们可以使用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)
    

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

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

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

    【讨论】:

    • 您可以将查询替换为空白字符串,而不是向后查找:sub("\\?.*","\\?",my.data$LANDING)
    • 谢谢你,这正是我所需要的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-10-19
    • 1970-01-01
    • 2019-02-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-21
    相关资源
    最近更新 更多