R语言中如何提取字符串

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了R语言中如何提取字符串相关的知识,希望对你有一定的参考价值。

参考技术A 你这个情况,需要使用正则表达式,基础函数中的substr函数,regexp函数,或者stringr包都可以,具体操作需要不断调试~

如何从R中数字之前的字符串中提取大写字母

【中文标题】如何从R中数字之前的字符串中提取大写字母【英文标题】:How to extract capital letters from string before number in R 【发布时间】:2022-01-08 12:27:07 【问题描述】:

我有一个列中包含字符串的数据框。如何在数字之前仅提取大写子字符串并将它们添加到另一列?以 DE 为例,但还有更多国家/地区的缩写,它们总是出现在数字之前。

TD<-data.frame(a=c("WHATEVERDE 11111","","Whatever DE 11111","DE 11111",""), 
           b=c("","What DE EverDE 1111","","",""),
           c=c("Whatever","","","","WhateverDE 11111"))

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

> TD
                  a                   b                c     result
1  WHATEVERDE 11111                             Whatever         DE
2                   What DE EverDE 1111                          DE
3 Whatever DE 11111                                              DE
4          DE 11111                                              DE
5                                       WhateverDE 11111         DE

我尝试应用解决方案:

sub("^([[:alpha:]]*).*", "\\1", "DE 11111") but is not universal.

带有缩写的向量:

names<-c('AT','BE','DE','BG','CZ','DK','FR','GR','ES','NL','HU','GB','IT')

【问题讨论】:

您是否有一个应该匹配的缩写向量,或者它是非特定的,即。匹配数字前的任何大写字母以及是否有空格? 是的,我可以接受带有国家/地区缩写的向量。它们总是用大写字母,在我的例子中是两个字母。 我更新了帖子。它现在应该可以工作了。从countrycode 包中你可以得到两个字母的缩写,用于创建模式 如果是三个字母,不是iso2c,而是iso3c 完美!非常感谢! 【参考方案1】:

我们循环across 列,提取在零个或多个空格和一个或多个数字之前的 2 个字母大写国家代码子字符串,coalesce 输出,以便它返回每行第一个非 NA 提取元素

library(dplyr)
library(stringr)
library(purrr)
library(countrycode)
pat <- countrycode::codelist %>%
       pull(iso2c) %>% 
       na.omit %>% 
       str_c(collapse = "|") %>% 
       sprintf(fmt = "(%s)(?=\\s*\\d+)")

TD %>% 
   mutate(result = invoke(coalesce, 
     across(everything(), ~ str_extract(., pat))))

-输出

                  a                   b                c result
1  WHATEVERDE 11111                             Whatever     DE
2                   What DE EverDE 1111                      DE
3 Whatever DE 11111                                          DE
4          DE 11111                                          DE
5                                       WhateverDE 11111     DE

【讨论】:

以上是关于R语言中如何提取字符串的主要内容,如果未能解决你的问题,请参考以下文章

c语言中,如何将字符串数组中的52提取出来,并转换为int类型

R语言:提取路径中的文件名字符串(basename函数)

答果子问R语言如何用正则表达式提取特定的字符串

R语言 变量赋值和提取 获取环境中的变量并赋值 assign和get函数使用

PHP 一个字符串,如何提取其中相同的字符?

如何从R中数字之前的字符串中提取大写字母