我想提取除模式之外的所有内容并将其返回到字符串中。
我试图将 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 而不是串联模式
取而代之的是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)