R语言数据可视化之美:专业图表绘制指南
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

2.1 表格的转换

2.1.1 表格的变换

在使用R ggplot2绘图时,通常使用一维数据列表的数据框。但是如果导入的数据表格是二维数据列表,我们则需要使用reshape2包的melt()函数或者tidyr包的gather()函数,可以将二维数据列表的数据框转换成一维数据列表(见图2-1-1)。我们首先构造数据框:

图2-1-1 表格变换的示意案例

        df<- data.frame(x=c('A', 'B', 'C'), '2010'=c(1,3,4), '2011'=c(3,5,2), check.names=FALSE)

(1)将宽数据转换为长数据,将多行聚集成列,从而将二维数据列表变成一维数据列表:

        df_melt<- reshape2::melt(df, id.vars="x", variable.name="year", value.name = "value")
        df_gather<- tidyr:: gather(df, year, value, -x)

其中,id.vars ("x")表示由标识变量构成的向量,用于标识观测的变量;variable.name ("year")表示用于保存原始变量名的变量的名称;value.name("value")表示用于保存原始值的名称。

(2)将长数据转换为宽数据,将一列根据变量展开为多行,从而将一维数据列表变成二维数据列表:

        df_dcast<- reshape2:: dcast(df_melt, x~year, value.var="value")
        df_spread <- tidyr::spread(df_gather, year, value)

其中,dcast借助于公式来描述数据的形状id.vars~variable.name,左边参数表示id.vars ("x"),而右边的参数表示需要variable.name ("year")。