首页 > 解决方案 > 尝试有条件地将字符串的子部分提取到新列中

问题描述

我试图只提取符合特定标准的字符串的一部分。我有一列由 1、2 或 3 个值组成,作为包含一个相似部分的字符串,例如,

c( " apa1 ghg2 PA0134", "qrz3 PA2858", "PA5103", "gan3 jgr3 PA4301").

我想只PAxxxx从字符串中收集值,或者将它分成 3 列,但只有一个PAxxxx值。

我尝试过使用gsub单独或子字符串的各种化身。但这些都依赖于一致的长度或条目数量。任何开始都会有所帮助。

标签: rregexsubstring

解决方案


这是一个带有str_extractfrom的选项stringr。指定单词边界(\\b),后跟子字符串“PA”和一个或多个字符

library(stringr)
str_extract(v1, "\\bPA\\w+")
#[1] "PA0134" "PA2858" "PA5103" "PA4301"

read.csv如果我们想作为一列,那么我们可以用from分成两列base R

read.csv(text = sub("\\b(PA)", ",\\1", v1), 
        header = FALSE, stringsAsFactors = FALSE)
#          V1     V2
#1 apa1 ghg2  PA0134
#2      qrz3  PA2858
#3            PA5103
#4 gan3 jgr3  PA4301

数据

v1 <- c("apa1 ghg2 PA0134", "qrz3 PA2858", "PA5103", "gan3 jgr3 PA4301")

推荐阅读