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

Mus*_*ord 4 string substring r dataframe

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

这是一个例子:

    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
Run Code Online (Sandbox Code Playgroud)

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

    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
Run Code Online (Sandbox Code Playgroud)

我尝试过使用str_sub正则str_extract_all表达式,但我相信我做错了。

Mar*_*pel 7

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

正则表达式要求输入大写字母或空格,并且需要有两个或多个连续的字母(因此它找不到大写单词)。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"
Run Code Online (Sandbox Code Playgroud)

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