【问题标题】:Selecting rows out of a column that contain a certain string in R从包含R中某个字符串的列中选择行
【发布时间】:2020-08-18 04:58:42
【问题描述】:

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

然后按州组织它们。共有 5 行:姓名、地点、两种类型的学费以及私人或公共。

我试过这个: 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”, “新罕布什尔州汉诺威”、“康涅狄格州新伦敦”、“罗德岛普罗维登斯”、“佛蒙特州普特尼”、 “圣达菲,NM”),class=“因子”),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"))

【问题讨论】:

  • 问题是 'words' 不是数据集中的列名。不确定您正在尝试哪一列。 Name 是具有“College”子字符串的一列。因此,插入“单词”,应将其更改为“名称”

标签: r


【解决方案1】:

我们可以在collapse| 中创建一个单独的字符串,用作str_detect 中的pattern

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)))

【讨论】:

  • 试过这个并得到了错误:> filter(tibble, str_detect(words, paste(typeSchool, collapse = "|"))) 错误:结果的长度必须是 400,而不是 980 这可能是学院和社区学院分类的区别?
  • @RocketRefs 你能用dput 显示几行 tibble 对象,以便我可以测试它。它应该实际工作
  • 有 400 行,每行 5 个变量,但前几行名称如下所示:".Label = c("Academy College", "Adelphi University", "Agnes Scott College", "AIB商学院”、“赫兹大学阿克伦学院”、“阿拉巴马农工大学”、“阿拉巴马州立大学”、“阿尔伯图斯马格努斯学院”、“奥尔德森布罗德斯大学”、“阿尔弗雷德大学”、“爱丽丝劳埃德学院”、 “Allegheny Wesleyan College”、“Allen College”、“Alliant International University-San Diego”、“American International College”、“Amherst College”、“Amridge University”,
  • @RocketRefs 是否可以用dput(droplevels(head(tibble))) 更新您的帖子,以便我获得结构
  • 我刚刚将其添加到原始帖子中。
猜你喜欢
  • 2021-12-22
  • 1970-01-01
  • 1970-01-01
  • 2016-02-11
  • 1970-01-01
  • 2021-02-01
  • 1970-01-01
  • 1970-01-01
  • 2020-02-23
相关资源
最近更新 更多