#r #count #grepl
#r #граф #grepl
Вопрос:
У меня есть столбец из 50 тысяч строк твитов с именем text из CSV-файла (твиты состоят из предложений, фраз и т.д.). Я пытаюсь подсчитать частоту нескольких слов в этой колонке. Есть ли более простой способ сделать это по сравнению с тем, что я делаю ниже?
# Reading my file
tweets <- read.csv('coffee.csv', header=TRUE)
# Doing a grepl per word (This is hard because I need to look for many words one by one)
coffee <- grepl("coffee", text$tweets, ignore.case=TRUE)
mugs <- grepl("mugs", text$tweets, ignore.case=TRUE)
# Calculate the % of times among all tweets (This is hard because I need to calculate one by one)
sum(coffee) / nrow(text)
sum(starbucks) / nrow(text)
Ожидаемый результат (при условии, что у меня там больше 2 слов)
Word Freq
coffee 50
mugs 40
cup 64
pen 12
Ответ №1:
Вы можете создать вектор слов, для которых вы хотите подсчитать частоту / процент, и использовать sapply
их для их вычисления.
words <- c('coffee', 'mugs')
data.frame(words, t(sapply(paste0('\b', words, '\b'), function(x) {
tmp <- grepl(x, tweets$text)
c(perc = mean(tmp) * 100,
Freq = sum(tmp))
})), row.names = NULL) -> result
result
# words perc Freq
#1 coffee 33.33333 1
#2 mugs 66.66667 2
sapply
аналогично for
циклу, поскольку он перебирает каждое слово, определенное в words
. grepl
возвращает TRUE
/ FALSE
значения, указывающие, присутствует ли слово, в tweets$text
котором хранится tmp
. Для подсчета частоты, которую мы используем sum
, и для процента, который мы используем mean
. Также добавлена граница слова ( \b
) к словам, чтобы они полностью совпадали в text
, следовательно 'coffee'
, не совпадают с 'coffees'
etc.
данные
tweets <- data.frame(text = c('This is text with coffee in it with lot of mugs',
'This has only mugs',
'This has nothing'))
Комментарии:
1. ПРИВЕТ, Ронак! Что касается получения данных, у меня есть 50 тыс. твитов, и я не думаю, что перевод их в вектор c будет работать. Как мне импортировать его из Tweets.csv? (Имя столбца: текст)
2. Вам не нужно помещать данные по одному в вектор. У вас уже есть данные
tweets <- read.csv('coffee.csv', header=TRUE)
. Вам нужно поместить в вектор слова, для которых вы хотите подсчитать частоту.words <- c('coffee', 'mugs', 'cup', 'pen')
3. Спасибо, что работает! Можете ли вы объяснить, что такое строки кода в: data.frame ? Например, что делает sapply и tmp?
4. Я добавил некоторое объяснение кода в ответ. Надеюсь, это поможет.
5. Извините, последний вопрос, что, если у меня есть примерно 2 слова, но я хочу посчитать их как одно, например: «кофе со льдом»? Будет ли это работать, нужно ли мне создавать gsub?