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

时间:2019-07-16 14:28:23

标签: r dplyr stringr

我想提取除模式以外的所有内容,并将其转化为字符串。

我试图将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=""))

返回NULL而不是串联模式

2 个答案:

答案 0 :(得分:2)

我们可以使用cat代替paste。此外,使用tidyverse,可以使用mapstr_c(代替paste-来自stringr的{​​{1}})

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

使用`OP代码

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

如果要获取数字

library(readr)
data %>%
     mutate(age_new = parse_number(x))

答案 1 :(得分:1)

这是一个非 tidyverse 解决方案,只使用 stringr。

apply(str_extract_all(column,regex_command,simplify = TRUE),1,paste,collapse="")

'simplify' = TRUE 将 str_extract_all 更改为输出矩阵,并在矩阵上应用迭代。我的想法来自https://stackoverflow.com/a/4213674/8427463

示例:提取 rownames(mtcar) 中的所有 'r' 并连接为向量

library(stringr)
apply(str_extract_all(rownames(mtcars),"r",simplify = TRUE),1,paste,collapse="")