Выделение строк из столбца, которые содержат определенную строку в R - PullRequest
1 голос
/ 03 мая 2020

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

А затем организуем их по штатам. Есть 5 строк: Имя, Местоположение, два типа обучения и частные или публичные c.

Я пробовал это: typeSchool <- c ("Колледж", "Университет", "Сообщество" Фильтр "College") (tibble, str_detect (words, paste (typeSchool))) * </p>

Но это не сработало. Ищу предложения.

Должен ли я попробовать переменные переменные и добавить отдельную переменную для каждой классификации, а затем group_by (классификация)?

Пример строки:

Также можно будет использовать форму за что? ), Местоположение = структура (c (5L, 1L, 6L, 2L, 3L, 4L), .Label = c ("АНДАНДАЛ-НА-ГУДСОН, Нью-Йорк", "HANOVER, NH", "НОВЫЙ ЛОНДОН, CT "," PROVIDENCE, RI "," PUTNEY, VT "," SANTA FE, NM "), класс =" фактор "), In.State.Tuition = c (50080L, 49906L, 49644L, 49506L, 49350L, 49346L), Out.of.State.Tuition = c (50080L, 49906L, 49644L, 49506L, 49350L, 49346L), Тип = структура (c (1L, 1L, 1L, 1L, 1L, 1L),. Label = "Private", class = "factor")), row.names = c (NA, -6L), class = c ("tbl_df", "tbl", "data.frame"))

1 Ответ

0 голосов
/ 03 мая 2020

Мы можем collapse с |, чтобы создать одну строку, которая будет использоваться как pattern в str_detect

library(stringr)
library(dplyr)
filter(tibble, str_detect(Name, paste(typeSchool, collapse = "|")))

Чтобы убедиться, что это не будет соответствовать ни одной из подстрок, мы можно использовать границу слова (\\b)

filter(tibble, str_detect(Name, paste0("\\b(", paste(typeSchool, collapse = "|"), ")\\b")))

Поскольку мы уже используем stringr, опция str_c будет полезна, если при возвращении отсутствуют пропущенные значения NA когда любое значение равно NA, а не paste, которое вставит NA также в строку

filter(tibble, str_detect(Name,  str_c(typeSchool, collapse = "|")))

Обновить

Если предполагается разделить или создать несколько наборов данных на основе «typeSchool», мы можем map над «typeSchool», filter строк на основе совпадения подстроки, чтобы вернуть list столбцов

library(purrr)
lst1 <-  map(typeSchool, ~  tibble %>% 
             filter(str_detect(Name, .x)))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...