R:从字符串中提取大写字母的子串

R: extract substring with capital letters from string

我有一个列中包含字符串的数据框。我怎样才能只提取大写字母的子字符串并将它们添加到另一列?

这是一个例子:

    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 使用正则表达式,但我认为我做错了。

 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

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

正则表达式要求大写字母或 space 并且需要有两个或更多个连续的字母(因此它不会找到大写的单词)。 str_trim 删除白色 - space 如果大写单词不在字符串的末尾,则可以将其拾取。

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

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 创建

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

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