Извлечь строку слов между двумя указанными c символами в R, вложенными в ifelse () - PullRequest
0 голосов
/ 05 марта 2020

Я хотел бы создать новую переменную (cPI) на основе формата существующей переменной (PI_NAMEs). PI_NAMEs содержит комбинацию одного имени и нескольких имен. Когда присутствует несколько имен, одно из них выделяется как «контакт», но место, где контакт отображается в полном списке нескольких имен, варьируется. Когда есть несколько имен, я знаю, что имя контакта для контакта содержится между ';' и «(контакт)». Когда существует только одно имя, это имя считается контактом.

Я использую пакеты dplyr и stringr и не могу выполнить следующий код для правильной работы.

Также ниже приведены несколько строк переменной PI_NAMEs. Спасибо за любые предложения.

НЕСКОЛЬКО ДАННЫХ

[950] MILLER, TIMOTHY A;
[951] DOULATOV, SERGEI; > [952] ПОЛЯ, НОЭЛЛА (контакт); XU, LING;
[953] LEE, SHOOU-YIH DANIEL;
[954] JAKOBS, THOMAS;
[955] MIWA, JUL IE M .; УИТИК, ПОЛ (контакт);
[956] ГЕЙН SH, САНТИ К;
[957] ВОНДРИСКА, ТОМАС М.;
[958] ШАПИРО, ЛОУРЕНС S;
[959] APPLING, ANTHONY;
[960] ЧЭН, РОГ H;
[961] MCNAMARA, ДЖЕЙМС О.;.
[962] ГОСУДАРСТВА, J КРИСТОФЕР;
[963] БОННЕ, РИЧАРД А; КРИСТИАН, ЛИОНЕЛЬ (контакт); SATIJA, RAHUL;
[964] SUBRAMANIAN, NAEHA;
[965] LEONG, DANIEL J (контакт); SUN, HUI BIN;
[966] ФЕРНАНДЕС-ЛИМА, ФРАНЦИСКО;
[967] СЕРЫЙ, БРИАН ДАВИД; Лю, Жонглин (контакт);

NEW_GRANT <- mutate(NEW_GRANT, cPI = ifelse(str_detect(as.character(NEW_GRANT$PI_NAMEs), pattern="(contact)"), str_extract(string=as.character(NEW_GRANT$PI_NAMEs), pattern = "(?<=;).*?=(contact)"), str_extract(string=as.character(NEW_GRANT$PI_NAMEs))))

Ошибка: ошибка оценки: отсутствует аргумент "шаблон", без значения по умолчанию.

1 Ответ

0 голосов
/ 21 марта 2020

Проблема в коде выше в том, что у вас нет аргумента шаблона в последнем str_exact. Почему бы просто не экспортировать значение в NEW_GRANT $ PI_NAMEs, когда только значение находится под именем PI?

...