Соберите ряды и нанесите столбчатый график в dplyr - PullRequest
0 голосов
/ 17 апреля 2020

У меня есть фрейм данных, который я хотел бы собирать в каждой строке как год (2010-2019). Исходя из этого, я хотел бы составить столбчатую диаграмму с накоплением, каждый стэк в каждом году был настроением.

#Take all rows and bind them together.
y <- rbind(nrc2010,nrc2011,nrc2012,nrc2013,nrc2014,nrc2015,nrc2016,nrc2017,nrc2018,nrc2019)

#Looks like this
structure(list(anger = c(273, 334, 235, 498, 442, 750, 316, 490, 
326, 419), anticipation = c(518, 580, 522, 959, 806, 1164, 535, 
756, 386, 797), disgust = c(199, 202, 132, 354, 281, 459, 178, 
282, 175, 289), fear = c(405, 467, 372, 1042, 831, 1202, 540, 
848, 477, 799), joy = c(302, 324, 300, 498, 470, 758, 355, 494, 
242, 573), negative = c(703, 690, 540, 1296, 1076, 1549, 697, 
1060, 629, 994), positive = c(1205, 1364, 1126, 2317, 1974, 3048, 
1318, 2007, 921, 1918), sadness = c(291, 264, 210, 523, 380, 
607, 298, 461, 280, 376), surprise = c(174, 182, 173, 337, 312, 
466, 270, 476, 199, 407), trust = c(836, 958, 729, 1311, 1334, 
1979, 856, 1356, 562, 1225)), row.names = c(NA, -10L), class = c("tbl_df", 
"tbl", "data.frame"))

@ akrun показал, как это сделать для одного единственного ряда, но есть ли способ сделать это? их все сразу?

То есть каждый столбец помечен годом со значением счетчика в ячейке.

nrc2010_2 <- nrc2010  %>% 
  pivot_longer(everything(), names_to = 'sentiment', values_to = 'count') %>% 
  arrange(desc(count))

Итак, из этой новой таблицы создайте столбчатую диаграмму с накоплением, ось х - год, ось y является количеством, и каждый стек в столбце является настроением для каждого года с легендой, указывающей, что заполнение.

1 Ответ

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

Мы можем получить все наборы данных в list с mget, затем связать строки с bind_rows при создании столбца 'year' из names list, а затем изменить его на long 'отформатируйте pivot_longer и используйте ggplot для построения гистограммы

library(dplyr)
library(tidyr)
library(stringr)
library(ggplot2)
mget(ls(pattern = '^nrc\\d{4}$')) %>%
   bind_rows(.id = 'year') %>% 
   mutate(year = str_remove(year, '^nrc')) %>% 
   pivot_longer(cols = -year, names_to = 'sentiment', values_to = 'count') %>%  
   arrange(desc(count)) %>% 
   ggplot(aes(x = year, y = count, fill = sentiment)) +
           geom_bar(colour = 'black', stat = 'identity')

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...