首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >删除括号中的字符串并将其添加为新列

删除括号中的字符串并将其添加为新列
EN

Stack Overflow用户
提问于 2015-07-07 11:57:08
回答 2查看 112关注 0票数 2

可能重复的Here

我有两列的数据框架。我希望删除括号中的字符串,并将其添加为新列。数据帧显示在下面。

代码语言:javascript
复制
      structure(list(ID = 1:12, Gene.Name = structure(c(3L, 11L, 9L, 
5L, 1L, 8L, 2L, 4L, 6L, 12L, 10L, 7L), .Label = c(" ATP synt, H+ tran, O subunit (oligomycin sensitivity conferring protein) (ATP5O), mRNA", 
" heterogeneous nuclear ribonucleoprotein F (HNRPF), mRNA", " NADH (ubiquinone) 1 alpha subcomplex, 4 (9kD, MLRQ) (NDUFA4), mRNA", 
" ribosomal protein L34 (RPL34), transcript variant 1, mRNA", 
" ribosomal protein S11 (RPS11), mRNA", "ATP synthase, H+ tran, mitochondrial F0, subunit c (subunit 9) isoform 3 (ATP5G3), mRNA", 
"clone MGC:10120 IMAGE:3900723, mRNA, complete cds", "cytidine monophosphate N-acetylneuraminic acid synthetase (CMAS), mRNA", 
"farnesyl-diphosphate farnesyltransferase 1 (FDFT1), mRNA", "homeobox protein from AL590526 (LOC84528), mRNA", 
"mitochondrial  S33 (MRPS33), transcript variant 1, nuclear gene, mRNA", 
"ribosomal protein S15a (RPS15A), mRNA"), class = "factor")), .Names = c("ID", 
"Gene.Name"), row.names = c(NA, -12L), class = "data.frame")

如果没有找到括号中的字符串,则将该行保留为空。这里我有两个箱子

1)获取括号中的所有字符串,并将其添加为用,分隔的新列

2)括号中的最后一个字符串并将其添加为新列

我尝试了类似于df$Symbol <- sapply(df, function(x) sub("\\).*", "", sub(".*\\(", "", x)))的东西,但是没有给出适当的输出

案例1产出

代码语言:javascript
复制
ID  Gene.Name                                                                                    Symbol
1    NADH (ubiquinone) 1 alpha subcomplex, 4 (9kD, MLRQ) (NDUFA4), mRNA                       ubiquinone, (9kD, MLRQ),NDUFA4
2   mitochondrial  S33 (MRPS33), transcript variant 1, nuclear gene, mRNA                      MRPS33
3   farnesyl-diphosphate farnesyltransferase 1 (FDFT1), mRNA                                   FDFT1
4    ribosomal protein S11 (RPS11), mRNA                                                       RPS11
5    ATP synt, H+ tran, O subunit (oligomycin sensitivity conferring protein) (ATP5O), mRNA   oligomycin sensitivity conferring protein,ATP5O
6   cytidine monophosphate N-acetylneuraminic acid synthetase (CMAS), mRNA                     CMAS
7    heterogeneous nuclear ribonucleoprotein F (HNRPF), mRNA                                   HNRPF
8    ribosomal protein L34 (RPL34), transcript variant 1, mRNA                                 RPL34
9   ATP synthase, H+ tran, mitochondrial F0, subunit c (subunit 9) isoform 3 (ATP5G3), mRNA   subunit 9,ATP5G3
10  ribosomal protein S15a (RPS15A), mRNA                                                      RPS15A
11  homeobox protein from AL590526 (LOC84528), mRNA                                            LOC84528
12  clone MGC:10120 IMAGE:3900723, mRNA, complete cds                                          NA

案例2产出

代码语言:javascript
复制
ID                                                                               Gene.Name   Symbol
1                      NADH (ubiquinone) 1 alpha subcomplex, 4 (9kD, MLRQ) (NDUFA4), mRNA   NDUFA4
2                   mitochondrial  S33 (MRPS33), transcript variant 1, nuclear gene, mRNA   MRPS33
3                                farnesyl-diphosphate farnesyltransferase 1 (FDFT1), mRNA   FDFT1
4                                                     ribosomal protein S11 (RPS11), mRNA   RPS11
5  ATP synt, H+ tran, O subunit (oligomycin sensitivity conferring protein) (ATP5O), mRNA   ATP5O
6                  cytidine monophosphate N-acetylneuraminic acid synthetase (CMAS), mRNA   CMAS
7                                 heterogeneous nuclear ribonucleoprotein F (HNRPF), mRNA   HNRPF
8                               ribosomal protein L34 (RPL34), transcript variant 1, mRNA   RPL34
9 ATP synthase, H+ tran, mitochondrial F0, subunit c (subunit 9) isoform 3 (ATP5G3), mRNA   ATP5G3
10                                                   ribosomal protein S15a (RPS15A), mRNA  RPS15A
11                                         homeobox protein from AL590526 (LOC84528), mRNA  LOC84528
12                                       clone MGC:10120 IMAGE:3900723, mRNA, complete cds   <NA>
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-07-07 12:51:34

使用sub获取字符串末尾圆括号中的单词的选项。

代码语言:javascript
复制
 Symbol <- sub('.*\\(([^\\)]+)\\)[^\\(]+$', '\\1',df1[,2])
 df1$Symbol <- Symbol[1:nrow(df1)*NA^(!grepl('\\(',df1[,2]))]
 df1$Symbol
 #[1] "NDUFA4"   "MRPS33"   "FDFT1"    "RPS11"    "ATP5O"    "CMAS"    
 #[7] "HNRPF"    "RPL34"    "ATP5G3"   "RPS15A"   "LOC84528" NA   

更新

第一个案子.提取圆括号中的所有字符并使用,将它们粘贴到一起,其中一个选项是从qdapRegex中提取rm_roundrm_round的输出是list。因此,我们使用lapply/sapply循环通过list。在其中包含,的字符串用grep分隔,我们用圆括号分隔,然后将字符串与collapse=', '放在一起。一个方便的包装函数是toString

代码语言:javascript
复制
 library(qdapRegex)
 df1$allSymbol <-  sapply(rm_round(df1[,2],extract=TRUE), function(x) {
                         indx <- grep(',', x)
                        x[indx] <-paste0("(", x[indx], ")")
                         toString(x)})

 is.na(df1$allSymbol) <- df1$allSymbol=='NA'
 df1[3:4]
 #                                          allSymbol   Symbol
 #1                   ubiquinone, (9kD, MLRQ), NDUFA4   NDUFA4
 #2                                            MRPS33   MRPS33
 #3                                             FDFT1    FDFT1
 #4                                             RPS11    RPS11
 #5  oligomycin sensitivity conferring protein, ATP5O    ATP5O
 #6                                              CMAS     CMAS
 #7                                             HNRPF    HNRPF
 #8                                             RPL34    RPL34
 #9                                 subunit 9, ATP5G3   ATP5G3
 #10                                           RPS15A   RPS15A
 #11                                         LOC84528 LOC84528
 #12                                             <NA>     <NA>
票数 4
EN

Stack Overflow用户

发布于 2015-07-07 12:25:05

我想我找到了一条简单的出路,但如果你能逃脱的话,你只需要匹配括号中那些看起来像基因符号的东西,即只有大写字母和数字。

代码语言:javascript
复制
dd <- structure(list(ID = 1:12, Gene.Name = structure(c(3L, 11L, 9L, 5L, 1L, 8L, 2L, 4L, 6L, 12L, 10L, 7L), .Label = c(" ATP synt, H+ tran, O subunit (oligomycin sensitivity conferring protein) (ATP5O), mRNA", " heterogeneous nuclear ribonucleoprotein F (HNRPF), mRNA", " NADH (ubiquinone) 1 alpha subcomplex, 4 (9kD, MLRQ) (NDUFA4), mRNA", " ribosomal protein L34 (RPL34), transcript variant 1, mRNA", " ribosomal protein S11 (RPS11), mRNA", "ATP synthase, H+ tran, mitochondrial F0, subunit c (subunit 9) isoform 3 (ATP5G3), mRNA", "clone MGC:10120 IMAGE:3900723, mRNA, complete cds", "cytidine monophosphate N-acetylneuraminic acid synthetase (CMAS), mRNA", "farnesyl-diphosphate farnesyltransferase 1 (FDFT1), mRNA", "homeobox protein from AL590526 (LOC84528), mRNA", "mitochondrial  S33 (MRPS33), transcript variant 1, nuclear gene, mRNA", "ribosomal protein S15a (RPS15A), mRNA"), class = "factor")), .Names = c("ID", "Gene.Name"), row.names = c(NA, -12L), class = "data.frame")


dd$Gene.Name <- as.character(dd$Gene.Name)

## case 1
mm <- gregexpr('(?<=\\()(.*?)(?=\\))', dd$Gene.Name, perl = TRUE)
mm <- regmatches(dd$Gene.Name, mm)


dd <- cbind(dd, case1 = sapply(mm, function(x)
  ifelse(length(x), paste(x, collapse = ', '), NA)))
dd[, c(1,3)]

#    ID                                            case1
# 1   1                    ubiquinone, 9kD, MLRQ, NDUFA4
# 2   2                                           MRPS33
# 3   3                                            FDFT1
# 4   4                                            RPS11
# 5   5 oligomycin sensitivity conferring protein, ATP5O
# 6   6                                             CMAS
# 7   7                                            HNRPF
# 8   8                                            RPL34
# 9   9                                subunit 9, ATP5G3
# 10 10                                           RPS15A
# 11 11                                         LOC84528
# 12 12                                             <NA>

## case 2
mm <- gregexpr('(?<=\\()([A-Z0-9]+)(?=\\))', dd$Gene.Name, perl = TRUE)
mm <- regmatches(dd$Gene.Name, mm)


dd <- cbind(dd, case2 = sapply(mm, function(x) ifelse(length(x), x, NA)))
dd[, c(1,4)]

#    ID    case2
# 1   1   NDUFA4
# 2   2   MRPS33
# 3   3    FDFT1
# 4   4    RPS11
# 5   5    ATP5O
# 6   6     CMAS
# 7   7    HNRPF
# 8   8    RPL34
# 9   9   ATP5G3
# 10 10   RPS15A
# 11 11 LOC84528
# 12 12     <NA>
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31267935

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档