R: как преобразовать переменные в значения в dataframe для ggplot - PullRequest
0 голосов
/ 24 августа 2018

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

Мой кадр данных из необработанных данных выглядит примерно так (упрощенный пример):

# create dataframe
date <- c("01/02/2018","14/02/2018","20/02/2018","03/03/2018","15/03/2018")
adult <- c(5,2,3,1,1) 
larvae <- c(6,5,9,7,12) 
nymph <- c(4,4,8,13,10)
df <- data.frame(date,adult,larvae,nymph)

 date adult larvae nymph
1 01/02/2018     5      6     4
2 14/02/2018     2      5     4
3 20/02/2018     3      9     8
4 03/03/2018     1      7    13
5 15/03/2018     1     12    10

Единственный способ, которым я знаю, как построить это с помощью ggplot, - это превратить переменные в уровни факторов новой переменной, скажем lifestage, и поместить все значения в переменную counts.

Этот фрейм данных будет выглядеть так:

df2
date  stage counts
1  01/02/2018  adult      5
2  14/02/2018  adult      2
3  20/02/2018  adult      3
4  03/03/2018  adult      1
5  15/03/2018  adult      1
6  01/02/2018 larvae      6
7  14/02/2018 larvae      5
8  20/02/2018 larvae      9
9  03/03/2018 larvae      7
10 15/03/2018 larvae     12
11 01/02/2018  nymph      4
12 14/02/2018  nymph      4
13 20/02/2018  nymph      8
14 03/03/2018  nymph     13
15 15/03/2018  nymph      1

Построение этого df легко:

ggplot(df2, aes(date, counts, fill=stage)) +
  geom_col(position = "dodge") 

Чтобы перейти от df к df2, у меня есть довольно большие обходные пути, включающие извлечение столбцов, создание новых векторов с rep("stagename",x) для добавления к фрейму данных, rbind() весь фрейм данных, умноженный на nr переменных, которые я хочу превратить в уровни факторов, и т. д. (я заметил, что раньше использовал несколько методов, но все довольно долго).

Итак, у меня есть 2 вопроса:

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

2) Есть ли способ получить барплот такого же типа без необходимости преобразовать данные?? 1024 *

Я пытался что-то вроде этого, но это, конечно, не правильно:

ggplot(data=df) +
  geom_col(aes(x=date,y=adult),fill="blue") +
  geom_col(aes(x=date,y=nymph),fill="green") +
  geom_col(aes(x=date,y=larvae),fill="yellow")

Я искал похожие вопросы, но, похоже, не могу найти проблему, похожую на мою. Также у меня двойная: если я могу сделать ggplot без преобразования, было бы лучше.

Я недавно обнаружил пакет tidyverse и предположил, что решение для преобразования будет лежать там, но я еще не сталкивался с чем-то, что позволило бы мне быстро преобразовать такого рода. Я бы предпочел любые решения, использующие этот пакет, если это возможно.

1 Ответ

0 голосов
/ 24 августа 2018
library(tidyverse)
df %>% 
  gather(stage, counts, -date) %>%
  ggplot(aes(date, counts, fill = stage)) +
  geom_col(position = "dodge") 

Это должно делать это или нет?

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