2016-04-04 4 views
0

このデータフレームはnewdfです。 colCという新しい列を作成し、最初の要素をカンマで区切ってnewdf[,"colB"]に作成しますが、「:p」で始まる値のみを含めます。コンマで終わる場合は,)、列colCで結果を取得します。列内のコンマで区切られた最初の要素グループを選択する方法

newdf<-structure(list(colA = structure(1:3, .Label = c("a", "b", "c" 
), class = "factor"), colB = structure(1:3, .Label = c("EN1:c.12CTG:p.L287fs,ENSG:p.L287fs,ENSG:exon10:TG:p.L258fs", 
"TG:p.L28fs,TG:p.L28fs.TG:p.L28fs", "TG:p.L2fs,TG:p.L8fs"), class = "factor")), .Names = c("colA", 
"colB"), row.names = c(NA, -3L), class = "data.frame") 

結果

colA              colB  colC 
    a  EN1:c.12CTG:p.L287fs,ENSG:p.L287fs,ENSG:exon10:TG:p.L258fs p.L287fs 
    b         TG:p.L28fs,TG:p.L28fs.TG:p.L28fs p.L28fs 
    c            TG:p.L2fs,TG:p.L8fs p.L2fs 

答えて

2

我々はstr_extractを使用していないもう一つの要素を一致させることができ

library(stringr) 
newdf$colC <- str_extract(newdf$colB, "[^:]+(?=,)") 
newdf$colC 
#[1] "p.L287fs" "p.L28fs" "p.L2fs" 

又は(正規表現の前後参照を使用して),続い:[^:]+)もう少し正確にするために、:(正規表現のルックアラウンドを使用)と 'p'の後にa .\\.)同じパターンが捕獲基

sub("^[^p]+(?<=:)(p\\.[^,]+).*", "\\1", newdf$colB, perl=TRUE) 
#[1] "p.L287fs" "p.L28fs" "p.L2fs" 
を用い subで使用することができる ,ない一つ以上の文字( [^,]+

str_extract(newdf$colB, "(?<=:)p\\.[^,]+") 
#[1] "p.L287fs" "p.L28fs" "p.L2fs" 

続い

関連する問題