2017-02-20 10 views
3

第3組のかっこの間に、stringの部分を、好ましくはベースRを使用して抽出したいとします。ここでは例のデータセットは次のとおりです。第3組のかっこの間の文字列を抽出する

my.data <- read.table(text = ' 
    my.num        my.string         my.cov 
     1 Abc(~1)Fgf(~-1+e2:cp)Bca(~-1+g1+g2:ti+g2:cfi+g2:pp+g2:cp)q(~-1+re:se) 10 
     2 Abc(~1)Fgf(~-1+e1:e2:fi)Bca(~-1+g1+g2:ti+g2:pr+g2:ts+g2:cfi)q(~1)  20 
     3 Abc(~1)Fgf(~1)Bca(~-1+g1+g2+g2:cp)q(~-1+re:se)       15 
', header = TRUE, stringsAsFactors = FALSE) 
my.data 

これら二つの結果のどちらかが参考になる:

desired.result1 <- read.table(text = ' 
    my.num      my.string   my.cov 
     1 Bca(~-1+g1+g2:ti+g2:cfi+g2:pp+g2:cp)  10 
     2 Bca(~-1+g1+g2:ti+g2:pr+g2:ts+g2:cfi)  20 
     3 Bca(~-1+g1+g2+g2:cp)      15 
', header = TRUE, stringsAsFactors = FALSE) 
desired.result1 

desired.result2 <- read.table(text = ' 
    my.num      my.string  my.cov 
     1 ~-1+g1+g2:ti+g2:cfi+g2:pp+g2:cp  10 
     2 ~-1+g1+g2:ti+g2:pr+g2:ts+g2:cfi  20 
     3 ~-1+g1+g2+g2:cp      15 
', header = TRUE, stringsAsFactors = FALSE) 
desired.result2 

私はどこ開始し、同様のを見つけることができませんでしさえわからないregexにそうさびていますインターネット上の質問。アドバイスや援助ありがとうございます。

+1

分割、三番目を取得し、整頓 – zx8754

+0

ことができますが。 –

+0

[これは参考になるかもしれません](http://stackoverflow.com/questions/8613237/extract-info-inside-all-paren Thesis-in-r) – Sotos

答えて

3

最初の式:

sub(".*?\\(.*?\\).*?\\(.*?\\)(.*?\\(.*?\\)).*", "\\1", my.data$my.string) 
[1] "Bca(~-1+g1+g2:ti+g2:cfi+g2:pp+g2:cp)" "Bca(~-1+g1+g2:ti+g2:pr+g2:ts+g2:cfi)" 
[3] "Bca(~-1+g1+g2+g2:cp)" 

第二の発現:

strsplitを使用して
sub(".*?\\(.*?\\).*?\\(.*?\\).*?\\((.*?)\\).*", "\\1", my.data$my.string) 
[1] "~-1+g1+g2:ti+g2:cfi+g2:pp+g2:cp" "~-1+g1+g2:ti+g2:pr+g2:ts+g2:cfi" "~-1+g1+g2+g2:cp" 
4

: "(" の

sapply(strsplit(my.data$my.string, split = "(", fixed = TRUE), function(i){ 
    strsplit(i[4], split = ")", fixed = TRUE)[[1]][1]}) 

# [1] "~-1+g1+g2:ti+g2:cfi+g2:pp+g2:cp" "~-1+g1+g2:ti+g2:pr+g2:ts+g2:cfi" "~-1+g1+g2+g2:cp" 
+2

またはこの 'paste0(サプリー(strsplit(my.data $ my.string、 '\\)')、 '['、3)、 ')')' – Sotos

関連する問題