【问题标题】:R: extract substring with capital letters from stringR:从字符串中提取带有大写字母的子字符串
【发布时间】:2021-04-14 03:27:29
【问题描述】:

我有一个列中包含字符串的数据框。如何仅提取大写字母的子字符串并将它们添加到另一列?

这是一个例子:

    fecha          incident
1   2020-12-01     Check GENERATOR
2   2020-12-01     Check BLADE
3   2020-12-02     Problem in GENERATOR
4   2020-12-01     Check YAW
5   2020-12-02     Alarm in SAFETY SYSTEM

我想创建另一个列,如下所示:

    fecha          incident                  system
1   2020-12-01     Check GENERATOR           GENERATOR
2   2020-12-01     Check BLADE               BLADE
3   2020-12-02     Problem in GENERATOR      GENERATOR
4   2020-12-01     Check YAW                 YAW
5   2020-12-02     Alarm in SAFETY SYSTEM    SAFETY SYSTEM

我尝试过使用正则表达式 str_substr_extract_all,但我认为我做错了。

【问题讨论】:

  • 使用 dput() 共享数据会更容易提供帮助。
  • 我很乐意,但实际数据是保密的......
  • 我是说分享你的所有数据。只是您已经共享的数据,只是在一个更容易复制和粘贴的地方。

标签: r string dataframe substring


【解决方案1】:

如果您想在数据框中工作并将其绑定到 tidyverse 工作流程中,可以使用 str_extract

正则表达式要求输入大写字母或空格,并且需要有两个或多个连续的(因此它找不到大写的单词)。 str_trim 删除如果大写单词不在字符串末尾时可以拾取的空格。

请注意,这段代码将仅提取通过空格连接的第一个大写单词。如果字符串的不同部分有大写单词,则只返回第一个。

library(tidyverse)
x <- c("CAPITAL and not Capital", "one more CAP word", "MULTIPLE CAPITAL words", "CAP words NOT connected")
cap <- str_trim(str_extract(x, "([:upper:]|[:space:]){2,}"))
cap
#> [1] "CAPITAL"          "CAP"              "MULTIPLE CAPITAL" "CAP"

reprex package (v0.3.0) 于 2021-01-08 创建

【讨论】:

    【解决方案2】:
     library(tidyverse)
    
     string <- data.frame(test="does this WORK")
    
     string$new <-str_extract_all(string$test, "[A-Z]+")
    
     string
    
               test  new
    1 does this WORK WORK
    

    【讨论】:

    • 感谢您的回答!但这实际上提取了我的字符串开头的“C”,例如“Check GENERATOR”,因为它也是一个大写字母。是否有任何正则表达式来提取大写单词?还要考虑到字符串可能有多个大写单词,例如“安全系统中的警报”
    【解决方案3】:

    如果存在大写字母不相邻的情况,您可以使用str_extract_all 提取句子中的所有大写字母,然后将它们粘贴在一起。

    sapply(stringr::str_extract_all(df$incident, '[A-Z]{2,}'),paste0, collapse = ' ')
    #[1] "GENERATOR"  "BLADE"    "GENERATOR"     "YAW"     "SAFETY SYSTEM"
    

    【讨论】:

      猜你喜欢
      • 2021-12-23
      • 2015-09-03
      • 2021-09-12
      • 2022-01-08
      • 1970-01-01
      • 2012-02-18
      • 2020-12-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多