2016-03-16 3 views
3

Как кто-то новый для R, я работаю над созданием словарного облака, которое показывает две переменные: frequency и rating. Используя общую таблицу, я ищу, чтобы отобразить гипотетическое количество колледжей (шрифт = больших малое число) государственным и гипотетического среднего рейтинг колледжаСлово облако в R с двумя отдельными значениями

  • 1 = зеленый (хорошо),
  • 3 = желтая (средний),
  • 5 = красный (плохо)

Я могу создать это облако, изображающие шрифты = количество колледжей, но не могу связать в рейтинге на третью колонку. Вот мой общий стол:

State Colleges Rating 
Alabama  220  1 
Alaska   100  3 
Arizona   50  5 
Arkansas  275  1 
California  155  3 
Colorado  68  5 
Connecticut 235  1 
Delaware  189  3 
Florida   32  5 
Georgia  219  1 
Hawaii   117  3 
Idaho   63  5 
Illinois  264  1 
Indiana  167  3 
Iowa   76  5 
Kansas   287  1 
Kentucky  178  3 
Louisiana  67  5 
Maine   246  1 
Maryland  169  3 
Massachusetts 46  5 
Michigan  225  1 
Minnesota  132  3 
Mississippi  23  5 
Missouri  219  1 
Montana  194  3 
Nebraska  97  5 

Ниже мой очень простой скрипт:

library(wordcloud) 
library(rcolorbrewer) 

data <- read.csv("wordcloud.csv", header = T) 
pal <- brewer.pal(9, "RdYlGn") 
wordcloud(data$State, data$Colleges, scale = c(4,1), colors = pal, rot.per=.5) 

Данный скрипт позволяет размер текста, чтобы отразить количество колледжей, но я не в состоянии связать цвет скат от 1 = зеленый (хороший) до 3 = желтый (средний) до 5 = красный (плохой). Любые предложения приветствуются.

ответ

2

Вы можете назначить цвета вручную и добавить ordered.colors=T

wordcloud(data$State, data$Colleges, 
scale = c(4,1), 
colors = rep(c("green", "yellow", "red"), 9), 
rot.per=.5, 
ordered.colors=T) 

enter image description here

+0

Я ценю вклад - это работает, но если изменить порядок (т.е. все «1» сначала, затем все «2» и т. д.), зеленый-желтый-красный продолжает цикл и не соответствует значению в этом столбце. Я все еще с этим согласен. Еще раз спасибо, вы очень помогли. – csv2004

+0

Конечно, порядок зависит от порядка строк, но если вы его измените, вы можете использовать этот подход в своем ответе, если вы затем соответствующим образом отрегулируете порядок цветов, например.to 'rep (c (« зеленый »,« желтый »,« красный »), каждый = 9)' – beetroot

+1

Сегодня я разговаривал с коллегой и придумал следующее: vec <- vector() для (i in 1: nrow (data)) { if (data [i, 3] == 1) { }} для (i in 1: nrow (data)) { if (data [i, 3] == 1) { vec [i] = "green"} if (data [i, 3] == 3) { vec [i] = "yellow"} if (data [i, 3] == 5) { vec [i] = "red"} } – csv2004

2

Там также возможность построить облако сравнения в таких случаях.

Для этого мы сначала преобразовать данные из долго широкоэкранного формата:

library(reshape2) 
df1 <- dcast(df1,State + Colleges ~ Rating, value.var = "Colleges") 

Затем мы выполняем несколько стандартных операции, чтобы подготовить подходящую матрицу:

rownames(df1) <- df1[,1] #use name of States as row names 
df1 <- df1[,-c(1,2)] #remove "States" and "Colleges" column 
df1[is.na(df1)] <- 0 #set NA values to zero 
df1 <- as.matrix(df1) #convert into matrix 
colnames(df1) <- c("good", "average", "bad") 

Наконец, можно построить облако сравнения и назначить цвета для групп по желанию:

library(wordcloud) 
comparison.cloud(df1,max.words=Inf,random.order=FALSE, scale = c(4,.5), 
        title.size = 1, colors=c("green","orange","red")) 

enter image description here

данные

df1 <- structure(list(State = structure(1:27, .Label = c("Alabama", 
"Alaska", "Arizona", "Arkansas", "California", "Colorado", "Connecticut", 
"Delaware", "Florida", "Georgia", "Hawaii", "Idaho", "Illinois", 
"Indiana", "Iowa", "Kansas", "Kentucky", "Louisiana", "Maine", 
"Maryland", "Massachusetts", "Michigan", "Minnesota", "Mississippi", 
"Missouri", "Montana", "Nebraska"), class = "factor"), Colleges = c(220L, 
100L, 50L, 275L, 155L, 68L, 235L, 189L, 32L, 219L, 117L, 63L, 
264L, 167L, 76L, 287L, 178L, 67L, 246L, 169L, 46L, 225L, 132L, 
23L, 219L, 194L, 97L), Rating = c(1L, 3L, 5L, 1L, 3L, 5L, 1L, 
3L, 5L, 1L, 3L, 5L, 1L, 3L, 5L, 1L, 3L, 5L, 1L, 3L, 5L, 1L, 3L, 
5L, 1L, 3L, 5L)), .Names = c("State", "Colleges", "Rating"), 
class = "data.frame", row.names = c(NA, -27L))