如何解决我们如何分割字符串并提取圆括号之间的文本
我需要将数据帧中的字符串拆分为两列,第一列包含圆括号前的值,第二列包含圆括号内的值。 这是一个示例:
study_name = c("apple bannan (tcga,raw 2018)","frame shift (mskk2 nature,2000)" )
results= c("Untested","tested")
df = data_frame(study_name,results)
这是我尝试的方法:
df <- df %>%
mutate(reference = str_extract_all(study_name,"\\([^()]+\\)")) %>%
rename(~gsub("\\([^()]+\\)","",study_name))
这是预期的数据帧:
reference = c("(tcga,"(mskk2 nature,2000)")
study = c("apple bannan","frame shift")
expexted_df = data_frame(study,reference)
解决方法
您可以使用separate()
并将分隔符设置为"\\s(?=\\()"
。
library(tidyr)
df %>%
separate(study_name,c("study","reference"),sep = "\\s(?=\\()")
# # A tibble: 2 x 3
# study reference results
# <chr> <chr> <chr>
# 1 apple bannan (tcga,raw 2018) Untested
# 2 frame shift (mskk2 nature,2000) tested
如果要提取括号中的文本,则使用extract()
是合适的选择。
df %>%
extract(study_name,regex = "(.+)\\s\\((.+)\\)")
# # A tibble: 2 x 3
# study reference results
# <chr> <chr> <chr>
# 1 apple bannan tcga,raw 2018 Untested
# 2 frame shift mskk2 nature,2000 tested
,
我们可以这样使用str_extract
:
library(stringr)
df$reference <- str_extract(df$study_name,"\\(.*\\)")
df$study <- str_extract(df$study_name,".*(?= \\(.*\\))")
结果:
df
study_name results reference study
1 apple bannan (tcga,raw 2018) Untested (tcga,raw 2018) apple bannan
2 frame shift (mskk2 nature,2000) tested (mskk2 nature,2000) frame shift
如果您不再需要study_name
列,请按以下方式删除它:
df$study_name <- NULL
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。