R Как сделать облако слов из подсчета? - PullRequest
0 голосов
/ 05 апреля 2020

Вот повторение подсчета, которое у меня есть:

word_tally <- data.frame(scarred  = c(1,1,0,0,0,0,0,0,0,0,0,0,0), 
                         happy    = c(0,0,1,0,0,0,0,0,0,0,0,0,0),
                         cheerful = c(0,0,0,1,0,0,0,0,0,0,0,0,0),
                         mad      = c(0,0,0,0,1,1,1,1,1,0,0,0,0),
                         curious  = c(0,0,0,0,0,0,0,0,0,1,1,1,1))

Чтобы создать облако слов, мне нужен 1 столбец со всеми словами. Как я мог преобразовать вышеупомянутый фрейм данных, чтобы сделать структуру такого типа для облака слов?

Ответы [ 2 ]

1 голос
/ 05 апреля 2020

Использование rep и colSums:

words <- rep(names(word_tally), colSums(word_tally))
words
 [1] "scarred"  "scarred"  "happy"    "cheerful" "mad"     
 [6] "mad"      "mad"      "mad"      "mad"      "curious" 
[11] "curious"  "curious"  "curious" 

Или, поскольку частоты представляют собой суммы столбцов, используя только данные.

wordcloud(names(word_tally), freq=colSums(word_tally), min.freq = 1) 

enter image description here

1 голос
/ 05 апреля 2020

Вы можете получить данные в длинном формате и удалить строки, где value = 0.

library(dplyr)

tidyr::pivot_longer(word_tally, cols = everything(), names_to = "word") %>%
  filter(value != 0) %>%
  select(word)  


# A tibble: 13 x 1
#   word    
#   <chr>   
# 1 scarred 
# 2 scarred 
# 3 happy   
# 4 cheerful
# 5 mad     
# 6 mad     
# 7 mad     
# 8 mad     
# 9 mad     
#10 curious 
#11 curious 
#12 curious 
#13 curious 

Это даст все слова в одном столбце, которые можно использовать в качестве входных данных для wordcloud.


В базе R другой способ может быть:

names(word_tally)[which(word_tally != 0, arr.ind = TRUE)[,2]]
...