我想提取除模式以外的所有内容,并将其转化为字符串。
我试图将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而不是串联模式
答案 0 :(得分:2)
我们可以使用cat
代替paste
。此外,使用tidyverse
,可以使用map
和str_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="")