如何编写R函数提取str_split()分割结果中指定位置的后续元素?
解决方案
通用可复用函数实现
基于tidyverse生态封装的通用分割提取函数,支持自定义指定任意位置的元素提取、多结果自动拼接:
library(tidyverse) str_split_extract <- function(x, split_pattern = " ", indices, collapse = NULL) { # 分割字符串后提取指定位置元素 res <- purrr::map(str_split(x, split_pattern), ~.x[indices]) # 若指定拼接符则将多元素合并为单个字符串 if (!is.null(collapse)) { res <- purrr::map_chr(res, paste, collapse = collapse) } return(res) }
场景使用示例
提取示例数据中生物双名法(分割后的第3、4位元素,空格拼接)的使用方法:
# 构造示例数据 foo <- data.frame(id = paste0("a", 1:6), Organisms = c("EA - Enterobacter aerogenes", "EA - Enterobacter aerogenes", "KP - Klebsiella pneumoniae", "ACBA - Acinetobacter baumannii", "ENC - Enterobacter cloacae", "KP - Klebsiella pneumoniae")) # 配合dplyr管道生成新列 foo <- foo %>% mutate(organism_binomial = str_split_extract(Organisms, indices = c(3,4), collapse = " "))
参数说明
x: 待处理的字符串向量split_pattern: 分割规则,支持正则表达式,默认按空格分割indices: 要提取的元素位置向量,支持任意位置组合,例如c(2,5)、1:3均可传入collapse: 多元素拼接符,设置为NULL时返回列表格式的提取结果,设置为空格、下划线等字符时会将同一条的多个提取结果拼接为单个字符串
内容的提问来源于stack exchange,提问作者Reed
相关产品推荐
相关产品推荐

