Я хочу создать барплот, который показывает количество ошибок в 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
и предположил, что решение для преобразования будет лежать там, но я еще не сталкивался с чем-то, что позволило бы мне быстро преобразовать такого рода.
Я бы предпочел любые решения, использующие этот пакет, если это возможно.