str_extract_all:返回在字符串中找到的所有模式连接为向量

Mat*_*nop 4 r stringr dplyr

我想提取除模式之外的所有内容并将其返回到字符串中。

我试图将 str_extract_all 与 sapply 和 cat 结合在一起

x = c("a_1","a_20","a_40","a_30","a_28")
data <- tibble(age = x)


# extracting just the first pattern is easy
data %>% 
  mutate(age_new = str_extract(age,"[^a_]"))
# combining str_extract_all and sapply doesnt work
data %>% 
  mutate(age_new = sapply(str_extract_all(x,"[^a_]"),function(x) cat(x,sep="")))


class(str_extract_all(x,"[^a_]"))
sapply(str_extract_all(x,"[^a_]"),function(x) cat(x,sep=""))
Run Code Online (Sandbox Code Playgroud)

返回 NULL 而不是串联模式

akr*_*run 6

取而代之的是cat,我们可以使用paste. 此外, with tidyverse, 可以使用mapand str_c(代替paste- from stringr

library(tidyverse)
data %>% 
  mutate(age_new = map_chr(str_extract_all(x, "[^a_]+"), ~ str_c(.x, collapse="")))
Run Code Online (Sandbox Code Playgroud)

使用`OP的代码

data %>%
    mutate(age_new = sapply(str_extract_all(x,"[^a_]"),
               function(x) paste(x,collapse="")))
Run Code Online (Sandbox Code Playgroud)

如果目的是获取数字

library(readr)
data %>%
     mutate(age_new = parse_number(x))
Run Code Online (Sandbox Code Playgroud)