R语言 选择句子中出现单词的行

syqv5f0l  于 2022-12-06  发布在  其他
关注(0)|答案(2)|浏览(135)

我想从一个数据集中筛选出特定的行,这个数据集是我从项目 gutenberg r包中获得的,为此,我想只选择包含给定单词的行,但问题是我的所有行都有多个单词,所以使用filter()将不起作用。
例如:
那句话是:"The Little Vanities of Mrs. Whittaker: A Novel"。我想过滤掉所有包含单词“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”包获取 Dataframe 的代码。

42fyovps

42fyovps1#

你可能正在寻找类似下面的东西。它将寻找***任何包含你输入的关键字的***字符串。

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

如果成功了,请告诉我们。

kg7wmglp

kg7wmglp2#

您可以使用底数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中搜索“Plays”的示例。

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

相关问题