【问题标题】:R remove last word from stringR从字符串中删除最后一个单词
【发布时间】:2012-10-26 20:24:36
【问题描述】:

我正在尝试做某事,但不记得/找不到答案。我有一份来自人口普查局的城市名称列表,他们把城市类型放在最后,这弄乱了我的match()

我想做这个:

Middletown Township
Sunny Valley Borough
Hillside Village

进入这个:

Middletown
Sunny Valley
Hillside

有什么建议吗?理想情况下,我还想知道 R 中是否有 lastIndexOf() 函数。

这是输出:

> dput(df1)
structure(list(id = c(1, 2, 3), city = structure(c(2L, 3L, 1L
), .Label = c("Hillside Village", "Middletown Township", "Sunny Valley Borough"
), class = "factor")), .Names = c("id", "city"), row.names = c(NA, 
-3L), class = "data.frame")

【问题讨论】:

    标签: r regex string


    【解决方案1】:

    这将起作用:

    gsub("\\s*\\w*$", "", df1$city)
    [1] "Middletown"   "Sunny Valley" "Hillside"   
    

    它删除由一个或多个空格字符组成的任何子字符串,后跟任意数量的“单词”字符(空格、数字或下划线),然后是字符串的结尾。

    【讨论】:

    • 如果我想得到“Township, Borough, Village”,即最后一个字怎么办。并将其另存为新变量?
    • 你可以使用 stringi 包。函数名称是 stri_extract_last_words。你可以为这个函数提供一个句子列表,它会返回这些句子中最后一个单词的列表。但是,它不会从句子中删除最后一个单词,为了删除目的,我们需要 Josh 提供的 gsub 命令
    【解决方案2】:

    这是一个满足您需要的正则表达式:

    sub(df1$city, pattern = " [[:alpha:]]*$", replacement = "")
    

    [1]“中城”“阳光谷”“山坡”

    这是用一个空字符串替换一个以空格开头,然后只包含字母直到字符串结尾的子字符串。

    【讨论】:

    • +1 这个正则表达式是更好的答案,因为它保留了单个单词。
    【解决方案3】:

    我会像这样在 stringr 包中使用word()

    df1 %>% mutate(city = word(city , 1  , -2))
    

    第一个参数 (1) 表示您从第一个单词开始,第二个参数 (-2) 表示您将所有内容保留到倒数第二个单词。

    【讨论】:

      猜你喜欢
      • 2021-12-14
      • 1970-01-01
      • 1970-01-01
      • 2016-01-21
      • 2015-06-08
      • 2023-02-03
      • 1970-01-01
      • 2018-03-27
      • 2017-07-17
      相关资源
      最近更新 更多