Подсчитать количество строк, содержащих слова - PullRequest
0 голосов
/ 22 октября 2019

У меня есть набор данных со многими строками, которые содержат описания фруктов, например:

An apple hangs on an apple tree
Bananas are yellow and tasty 
The apple is tasty

Мне нужно найти уникальные слова в этом описании (я уже сделал это), а затем я должен посчитать, какмного строк, эти уникальные слова появляются. Пример:

Apple 2 (rows)
Bananas 1 (rows)
tree 1 (rows)
tasty 2 (rows)

Я сделал что-то подобное:

rows <- data_frame %>%
  filter(str_detect(variable, "apple"))
count_rows <- as.data.frame(nrow(rows))

Но проблема в том, что у меня слишком много уникальных слов, поэтому я не хочу делать это вручную. Есть идеи?

Ответы [ 3 ]

0 голосов
/ 22 октября 2019

В базе R это можно сделать следующим образом.

r <- apply(sapply(words, function(s) grepl(s, df[[1]], ignore.case = TRUE)), 2, sum)
as.data.frame(r)
#        r
#Apple   2
#Bananas 1
#tree    1
#tasty   2

Данные.

x <-
"'An apple hangs on an apple tree'
'Bananas are yellow and tasty' 
'The apple is tasty'"

x <- scan(textConnection(x), what = character())
df <- data.frame(x)

words <- c("Apple", "Bananas", "tree", "tasty")
0 голосов
/ 22 октября 2019

Основным решением R было бы использование grepl с sapply или lapply:

sapply(list_of_words, function(x) sum(grepl(x, tolower(df$sentences), fixed = T)))
apple bananas    tree   tasty 
    2       1       1       2 
0 голосов
/ 22 октября 2019

Один dplyr и tidyr параметр может быть:

df %>%
 rowid_to_column() %>%
 mutate(sentences = strsplit(sentences, " ", fixed = TRUE)) %>%
 unnest(sentences) %>%
 mutate(sentences = tolower(sentences)) %>%
 filter(sentences %in% list_of_words) %>%
 group_by(sentences) %>%
 summarise_all(n_distinct)

  sentences rowid
  <chr>     <int>
1 apple         2
2 bananas       1
3 tasty         2
4 tree          1

Пример данных:

df <- data.frame(sentences = c("An apple hangs on an apple tree",
                               "Bananas are yellow and tasty",
                               "The apple is tasty"),
                 stringsAsFactors = FALSE)   

list_of_words <- tolower(c("Apple", "Bananas", "tree", "tasty"))
...