Мне нужна помощь в понимании того, что происходит в моей трубе dplyr
, и я прошу различные решения этой проблемы.
Проблема
У меня есть список институтов (формальный термин, по которому авторы статей родом из статьи в исследовательском журнале), и я хотел бы извлечь название основного института. Если это университет, это будет Univ. XX, и это пример, который я придерживаюсь здесь для простоты.
Логика попыток решения
- Разделите название института на запятую
- grep для термина "унив" или другого списка терминов, связанных с университетом
- извлечь индекс, где есть попадание
Краевые случаи / предположения
- Термин, который я ищу, существует только в одном из разбиений
- все институты здесь являются университетами (здесь проблема проста для переполнения стека)
код
df %>%
mutate(instGuess = unlist(strsplit(institute, ","))[grep("univ", unlist(strsplit(institute, ",")))][1]) %>%
head()
То, что я предполагаю, происходит, но не происходит, это логика, которую я написал выше. Я вижу, что в mutate первый экземпляр institute
находится в поиске КАЖДОЙ строки в df
и точно такой же «университет новых, так что ~» заполняется. У меня есть общее представление о том, в чем ошибка кроме как без понятия, почему это происходит или как это исправить, сохраняя dplyr
. Если я использую функцию apply
, я могу сделать это, и мне любопытно, какие есть ответы SO.
Как это выглядит:
# A tibble: 6 x 2
institute instGuess
<chr> <chr>
1 school of computer science and engineering, university of new south wales, sydney~ " university of new so~
2 department computer science, friedrich-alexander-university, erlangen-nuremberg, ~ " university of new so~
3 department of ece, pesit, bangalore, india " university of new so~
4 school of information technology and electrical engineering, university of queens~ " university of new so~
5 school of information technology and electrical engineering, university of queens~ " university of new so~
6 dept. of info. syst. and comp. sci., national university of singapore, 10 kent ri~ " university of new so~
Данные, использованные для примера
df <- structure(list(institute = c("school of computer science and engineering, university of new south wales, sydney, australia",
"department computer science, friedrich-alexander-university, erlangen-nuremberg, germany",
"department of ece, pesit, bangalore, india", "school of information technology and electrical engineering, university of queenslandqld, australia",
"school of information technology and electrical engineering, university of queenslandold, australia",
"dept. of info. syst. and comp. sci., national university of singapore, 10 kent ridge crescent, singapore 119260, singapore"
), instGuess = c(" university of new south wales", " university of new south wales",
" university of new south wales", " university of new south wales",
" university of new south wales", " university of new south wales"
)), .Names = c("institute", "instGuess"), row.names = c(NA, -6L
), class = c("tbl_df", "tbl", "data.frame"))