从列中选择包含R中特定字符串的行

时间:2020-05-03 20:00:08

标签: r

我有一组具有不同名称的大学的数据集,例如“ x学院”,“ x大学”和“ x社区学院”,需要根据大学,社区学院或大学的分类对它们进行分组。

然后按州组织它们。有5行:名称,位置,两种学费以及私人或公共学费。

我已经尝试过了: typeSchool <-c(“学院”,“大学”,“社区学院”) filter(tibble,str_detect(words,paste(typeSchool)))

但是它没有用。寻找建议。

我应该尝试对变量进行突变并为每个分类添加一个单独的变量,然后再对group_by(classification)进行添加吗?

示例行:

还可以为此使用grep的形式吗?


structure(list(Name = structure(c(5L, 1L, 6L, 4L, 3L, 2L), .Label = c("Bard College", 

“布朗大学”,“康涅狄格大学”,“达特茅斯学院”, “ Landmark College”,“ St。John's College”),class =“ factor”), 位置=结构(c(5L,1L,6L,2L,3L,4L),.Label = c(“ ANNANDALE-ON-HUDSON,NY”, “新罕布什尔州汉诺威”,“康涅狄格州新伦敦”,“ RI省”,“佛蒙特州普特尼”, “ SANTA FE,NM”),class =“ factor”),In.State.Tuition = c(50080L, 49906L,49644L,49506L,49350L,49346L),州外学费= 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 :(得分:0)

我们可以将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时会返回paste,而不是{{1 }}也会将NA粘贴在字符串中

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

更新

如果要基于'typeSchool'拆分或创建多个数据集,我们可以map在'typeSchool'之上,filter基于子字符串匹配的行将返回{{ 1}}的小词

list