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_sub
或 str_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"
我有一个列中包含字符串的数据框。我怎样才能只提取大写字母的子字符串并将它们添加到另一列?
这是一个例子:
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_sub
或 str_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"