R:如何将变量转换为ggplot的数据帧中的值

时间:2018-08-24 12:07:05

标签: r dataframe ggplot2

我想创建一个条形图,以显示3个不同生命周期中的错误数量。对于每个日期(x),我想要三个代表nr的小节。每个生命阶段中的个体数量。

我来自原始数据的数据帧看起来像这样(简化示例):

# 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中。 / p>

该数据框如下所示:

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)有没有一种方法可以获取相同类型的barplot     从数据帧转换过来?

我正在尝试类似的方法,但这当然是不正确的:

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 :(得分:4)

library(tidyverse)
df %>% 
  gather(stage, counts, -date) %>%
  ggplot(aes(date, counts, fill = stage)) +
  geom_col(position = "dodge") 

应该这样做吗?