如何在描述栏
的括号中对仅包含条目的数据进行子集化 data= ID description control
1814668 glycoprotein 2 (Gp2) (Fy2) LMN_2904435
1791634 claudin 10 (Cldn10), transcript variant 1 ILMN_1214954 NM
1790993 claudin 10 (Cldn10), transcript variant 2 ILMN_2515816
输出
ID description control
1814668 Gp2, Fy2 LMN_2904435
1791634 Cldn10 ILMN_1214954 NM
1790993 Cldn10 ILMN_2515816
答案 0 :(得分:5)
你可以尝试
df2$description <- gsub('.*\\(([^)]+)\\).*', '\\1', df2$description)
或使用bracketXtract
qdap
library(qdap)
unlist(bracketXtract(df2$description, 'round'))
或者
library(qdapRegex)
unlist(rm_round(df2$description, extract=TRUE))
基于新数据集&#34; df2N&#34;,
df2N$description <- sapply(rm_round(df2N$description,
extract=TRUE),toString)
或使用str_extract
library(stringr)
sapply(str_extract_all(df2N$description,
perl('(?<=\\()[^)]+(?=\\))')), toString)
答案 1 :(得分:1)
可能没有@akrun的解决方案那么棒,但是这里有另一种选择,使用gsub
中的函数base R
(两次......):
df2$description <- gsub("^,\\s|,\\s$",
"",
gsub("^[^(]*\\(|\\)[^()]*\\(|\\)[^(]*$",
", ",
df2$description, perl=T))
#[1] "Gp2, Fy2" "Cldn10" "Cldn10"
首先,它告诉R搜索:
^[^(]*\\(
:任何不是开头括号的东西,在开头
字符串,以开括号结尾\\)[^()]*\\(
:一个右括号,后跟任何不是括号的内容,以一个左括号结尾\\)[^(]*$
:一个结束括号,后跟任何不是开括号并直到字符串结尾的内容并用逗号后跟空格替换它。
第二次,它会替换&#34;逗号,后跟空格&#34;在字符串的开头和结尾用空字符串。