R создать столбец, выбрав частичные строки - PullRequest
0 голосов
/ 23 октября 2019

У меня есть фрейм данных, и я хочу извлечь определенную строку в одном из столбцов с помощью разделителя, но есть несколько условий. Я хочу изменить новый столбец, содержащий только строки COSVxxxx.

df:

ID
.
COSV50419740
.
.
.
rs375210814
.
rs114284775;COSV60321424
.
.
.
rs67376798;88974
rs1169783812
rs56386506;51676;COSV66451617
rs80358907;52202
.
.
.
482972
629301
COSV66463357
rs80358408;51066
rs80358420;51100;COSV66464432

требуемый df:

ID  COSV.ID
.   .
COSV50419740    COSV50419740
.   .
.   .
.   .
rs375210814 rs375210814
.   .
rs114284775;COSV60321424    COSV60321424
.   
.   
.   
rs67376798;88974    rs67376798;88974
rs1169783812    rs1169783812
rs56386506;51676;COSV66451617   COSV66451617
rs80358907;52202    rs80358907;52202
.   .
.   .
.   .
482972  482972
629301  629301
COSV66463357    COSV66463357
rs80358408;51066    rs80358408;51066
rs80358420;51100;COSV66464432   COSV66464432

Я хочу сохранить строку, еслинет аннотации COSV. Тем не менее, моя проблема заключается в том, что есть несколько строк, содержащих от одной до четырех аннотации через двоеточие. Я пытался использовать функцию cSplit для их разделения, но не знаю, как преобразовать строку COSV в один столбец.

1 Ответ

1 голос
/ 23 октября 2019

Вы можете использовать sub здесь, например,

df$ID_new <- ifelse(grepl("\\bCOSV\\d+\\b", df$ID),
                    sub("^.*\\b(COSV\\d+)\\b.*$", "\\1", df$ID),
                    NA)

Эта опция назначит (последнее) значение COSV, если оно существует в столбце ID, в противном случае оно назначит NA.

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