【问题标题】:Selecting rows where a word occurs in the sentence选择句子中出现单词的行
【发布时间】:2022-01-03 23:06:24
【问题描述】:

我想从 Gutenberg r 项目包中获得的数据集中过滤掉特定的行。为此,我只想选择包含给定单词的行,但问题是我的所有行都有多个单词,因此使用 filter() 将不起作用。

例如:

这句话是:"The Little Vanities of Mrs. Whittaker: A Novel"。我想过滤掉所有包含“小说”这个词的行,但我不知道怎么做。

gutenberg_full_data <- left_join(gutenberg_works(language == "en"), gutenberg_metadata, by = "gutenberg_id")

gutenberg_full_data <- left_join(gutenberg_full_data, gutenberg_subjects)

gutenberg_full_data <- subset(gutenberg_full_data, select = -c(rights.x,has_text.x,language.y,gutenberg_bookshelf.x, gutenberg_bookshelf.y,rights.y, has_text.y,gutenberg_bookshelf.y, gutenberg_author_id.y, title.y, author.y))

gutenberg_full_data <- gutenberg_full_data[-which(is.na(gutenberg_full_data$author.x)),]
novels <- gutenberg_full_data %>% filter(subject == "Drama")

original_books <- gutenberg_download((novels), meta_fields = "title")

original_books

tidy_books <- original_books %>%
  unnest_tokens(word, text)

这是我使用“gutenbergr”包获取数据框的代码。

【问题讨论】:

标签: r filter row word


【解决方案1】:

您可能正在寻找类似下面的内容。它将查找包含您输入的关键字的任何字符串。

stringr::str_detect(variable, "keyword")

仅对特定字符串进行子集化的示例

library(stringr)


df <- df %>% filter(str_detect(column_that_contains_the_word, "the word"))

在您的情况下(我假设)过滤掉特定字符串并保留所有其他

library(stringr)


original_books <- original_books %>% filter(!str_detect(title, c("novel", "Novel", "NOVEL")))

让我们知道它是否有效。

【讨论】:

  • 该!在 str_detect 错误之前。但除此之外效果很好,谢谢。如果这篇文章是重复的,很抱歉。
  • 该! before 表示我们在子集时排除它。没有它,您只是对特定模式/字符串进行子集化并排除所有其他内容。另外,如果它有效,请提供答案解决了您的问题。
  • word = c("novel", "Novel", "NOVEL") 小说 % filter(str_detect(title.x,word))
  • 如果您能将我的答案标记为解决了您的问题的答案,那就太好了。
【解决方案2】:

您可以为此使用基础 R 中的 grepl()。如果单词存在,grepl() 返回 True,否则返回 False

text = "The Little Vanities of Mrs. Whittaker: A Novel"
word = "Novel"

> grepl(word, text)

[1] TRUE

您的original_books 文件需要大量下载,因此我将向您展示在novels 数据框的title.x 中搜索“播放”的示例。

> novels %>% 
     mutate(contains_play = grepl("Plays", title.x))

# A tibble: 54 × 8
   gutenberg_id title.x          author.x      gutenberg_autho… language.x subject_type subject contains_play
          <int> <chr>            <chr>                    <int> <chr>      <chr>        <chr>   <lgl>        
 1         1308 A Florentine Tr… Wilde, Oscar               111 en         lcsh         Drama   FALSE        
 2         2270 Shakespeare's F… Shakespeare,…               65 en         lcsh         Drama   FALSE        
 3         2587 Life Is a Dream  Calderón de …              970 en         lcsh         Drama   FALSE        
 4         4970 There Are Crime… Strindberg, …             1609 en         lcsh         Drama   FALSE        
 5         5053 Plays by August… Strindberg, …             1609 en         lcsh         Drama   TRUE         
 6         5618 Six Plays        Darwin, Flor…             1814 en         lcsh         Drama   TRUE         
 7         6587 King Arthur's S… Dell, Floyd               2100 en         lcsh         Drama   TRUE         
 8         6782 The Robbers      Schiller, Fr…              289 en         lcsh         Drama   FALSE        
 9         6790 Demetrius: A Pl… Schiller, Fr…              289 en         lcsh         Drama   FALSE        
10         6793 The Bride of Me… Schiller, Fr…              289 en         lcsh         Drama   FALSE        
# … with 44 more rows

注意grepl() 允许第二个参数是一个向量。因此,没有必要使用rowwise()。如果它只允许在字符串中搜索,我们将不得不使用rowwise()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-01-15
    • 2016-06-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-14
    相关资源
    最近更新 更多