R使用长度大于1的模式替换gsub

时间:2016-06-29 15:32:54

标签: regex r gsub

我有一个带有变量(example)的data.frame care_group,如下所示:

> example
      care_group
    1 1st Choice Care Homes 8.8
    2 2Care
    3 229 Mitcham Lane Ltd
    4 3 L Care Ltd
    5 3AB Care Ltd
    6 9Grace Road Ltd
    7 A&R Care Ltd 9.7
    8 ABLE (Action for a Better Life)
    9 A C L Care Homes Ltd
    10 A D L plc
    11 A D R Care Homes Ltd
    12 A G E Nursing Homes Ltd 8

正如您所注意到的,我的一些观察结果是字母数字,并且在开头和/或结束名称中都包含数字。我知道可以摆脱数字字符(例如参见here)。然而,我不知道如何只删除其中一些。具体而言,删除名称末尾包含的数字,并将其保留在开头。我尝试通过创建一个包含我要删除的数字的组并尝试使用gsub来实现此目的。

ratings = c("8", "8.8", "9.7")
example$new_var = with(example, gsub(ratings, " ", care_group))

但是我收到了这条警告信息:

Warning message:

In gsub(ratings, " ", care_group) :
  argument 'pattern' has length > 1 and only the first element will be used

我想知道是否可以使用长度为>的模式的gsub。 1或者是否有人可以提出更有效的方法来解决这个问题。提前谢谢了。

1 个答案:

答案 0 :(得分:1)

最好使用锚点和角色类:

# sample of vector with various possibilities
temp <- c(" 7 A&R Care Ltd 9.7", "A C L Care Homes Ltd", "12 A G E Nursing Homes Ltd 8")

gsub(" [0-9.]+$", "", temp)

[1] " 7 A&R Care Ltd"   "A C L Care Homes Ltd"       "12 A G E Nursing Homes Ltd"

在正则表达式中

  • $将表达式锚定到文本的末尾
  • &#34; [0-9。] +&#34;说任何数字字符序列,包括&#34;。&#34;