Создайте столбец, содержащий определенные строковые выражения, полученные из другого столбца. - PullRequest
1 голос
/ 05 ноября 2019

В кадре данных я хотел бы создать столбец из существующего. Новый столбец (name = "Symbol") должен содержать только подмножество выражений, найденных в существующем столбце (name = "Description), на основе соответствующего шаблона, который в моем случае определяется префиксом GN=. Для этихДля ячеек, в которых отсутствует соответствующий шаблон из существующего столбца, в новом столбце должно быть возвращено «Не доступно». Отсюда:

View(df[,1:3])

Accession   Description                                                                               Sample1
A0FGR9      Extended synaptotagmin-3 OS=Homo sapiens GN=ESYT3 PE=1 SV=1 - [ESYT3_HUMAN]               117.920
A6NHJ4      Zinc finger protein 860 OS=Homo sapiens GN=ZNF860 PE=1 SV=3 - [ZN860_HUMAN]               30.218
A0A0C4DH68  Immunoglobulin kappa variable 2-24 OS=Homo sapiens GN=IGKV2-24 PE=3 SV=1 - [KV224_HUMAN]  524.706
P0DOX7      Immunoglobulin kappa light chain OS=Homo sapiens PE=1 SV=1 - [IGK_HUMAN]                  503.110

Я хотел бы получить здесь:

View(df[,1:4])

Accession   Description                                                                               Symbol          Sample1
A0FGR9      Extended synaptotagmin-3 OS=Homo sapiens GN=ESYT3 PE=1 SV=1 - [ESYT3_HUMAN]               ESYT3           117.920
A6NHJ4      Zinc finger protein 860 OS=Homo sapiens GN=ZNF860 PE=1 SV=3 - [ZN860_HUMAN]               ZNF860          30.218
A0A0C4DH68  Immunoglobulin kappa variable 2-24 OS=Homo sapiens GN=IGKV2-24 PE=3 SV=1 - [KV224_HUMAN]  IGKV2-24        524.706
P0DOX7      Immunoglobulin kappa light chain OS=Homo sapiens PE=1 SV=1 - [IGK_HUMAN]                  Not available   503.110

Заранее благодарим за полезные предложения.

data

df <- read.table(h=T,strin=F,text="
Accession   Description                                                                               Sample1
A0FGR9      'Extended synaptotagmin-3 OS=Homo sapiens GN=ESYT3 PE=1 SV=1 - [ESYT3_HUMAN]'               117.920
A6NHJ4      'Zinc finger protein 860 OS=Homo sapiens GN=ZNF860 PE=1 SV=3 - [ZN860_HUMAN]'               30.218
A0A0C4DH68  'Immunoglobulin kappa variable 2-24 OS=Homo sapiens GN=IGKV2-24 PE=3 SV=1 - [KV224_HUMAN]'  524.706
P0DOX7      'Immunoglobulin kappa light chain OS=Homo sapiens PE=1 SV=1 - [IGK_HUMAN]'                  503.110
")

Ответы [ 2 ]

1 голос
/ 05 ноября 2019

Вы можете попробовать следующее regex

df$symbol = sub(".*GN=(.*?) .*","\\1",df$Description)

Затем исправить для несоответствий

df$symbol[df$symbol==df$Description] = "Not available"
0 голосов
/ 06 ноября 2019

Вы можете использовать пакет открепить :

# install.packages("unglue")
library(unglue)
df <- unglue_unnest(df, Description, "{=.*?} GN={Symbol} {=.*?}", remove = FALSE)
df$Symbol[is.na(df$Symbol)] <- "Not available"
df
#>    Accession
#> 1     A0FGR9
#> 2     A6NHJ4
#> 3 A0A0C4DH68
#> 4     P0DOX7
#>                                                                                Description
#> 1              Extended synaptotagmin-3 OS=Homo sapiens GN=ESYT3 PE=1 SV=1 - [ESYT3_HUMAN]
#> 2              Zinc finger protein 860 OS=Homo sapiens GN=ZNF860 PE=1 SV=3 - [ZN860_HUMAN]
#> 3 Immunoglobulin kappa variable 2-24 OS=Homo sapiens GN=IGKV2-24 PE=3 SV=1 - [KV224_HUMAN]
#> 4                 Immunoglobulin kappa light chain OS=Homo sapiens PE=1 SV=1 - [IGK_HUMAN]
#>   Sample1        Symbol
#> 1 117.920         ESYT3
#> 2  30.218        ZNF860
#> 3 524.706      IGKV2-24
#> 4 503.110 Not available

Дополнительная информация: https://github.com/moodymudskipper/unglue/blob/master/README.md

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...