2015-03-03 2 views
0

У меня есть data.frame называется rbp, который содержит один столбец, как следующее:Расщепление столбец data.frame в R, используя GSUB

>rbp 
      V1 
    dd_smadV1_39992_0_1 
    Protein: AGBT(Dm) 
    Sequence Position 
    234 
    290 
    567 
    126 
    Protein: ATF1(Dm) 
    Sequence Position 
    534 
    890 
    105 
    34 
    128 
    301 
    Protein: Pox(Dm) 
    201 
    875 
    453 
    ********************* 
    dd_smadv1_9_02 
    Protein: foxc2(Mm) 
    Sequence Position 
    145 
    987 
    345 
    907 
    Protein: Lor(Hs) 
    876 
    512 

Я хотел бы отказаться от позиции последовательности и извлекать только конкретный детали, как имена последовательности и соответствующие имена белка, такие как следующие:

dd_smadV1_39992_0_1 AGBT(Dm);ATF1(Dm);Pox(Dm) 
dd_smadv1_9_02 foxc2(Mm);Lor(Hs) 

Я попытался следующий код в R, но это не удалось:

library(gsubfn) 
Sub(rbp$V1,"Protein:(.*?) ") 

Может ли кто-нибудь мне помочь.

ответ

1

Вот один из способов ему:

m <- gregexpr("Protein: (.*?)\n", x <- strsplit(paste(rbp$V1, collapse = "\n"), "*********************", fixed = TRUE)[[1]]) 
proteins <- lapply(regmatches(x, m), function(x) sub("Protein: (.*)\n", "\\1", x)) 
names <- sub(".*?([A-z0-9_]+)\n.*", "\\1", x) 
sprintf("%s %s", names, sapply(proteins, paste, collapse = ";")) 
# [1] "dd_smadV1_39992_0_1 AGBT(Dm);ATF1(Dm);Pox(Dm)" 
# [2] "dd_smadv1_9_02 foxc2(Mm);Lor(Hs) 
+0

Спасибо за ваш ответ. Он работал, но я хотел бы иметь идентификаторы одного столбца и соответствующие имена белка в другом столбце. Также есть пустая строка между двумя параметрами: – Carol

+0

Вы должны иметь возможность получить два столбца, используя 'read.table (text = sprintf («% s% s », имена, sapply (белки, паста, collapse ="; "))) '. Я не могу воспроизвести пустые строки с предоставленными вами данными, но я уверен, что вы можете легко их исключить. – lukeA

Смежные вопросы