|
将数据整理成作图所需的格式,是完成科研图表绘制的前提。而对于常见的作图数据组织方式主要有两种:宽数据和长数据。
1、宽数据与长数据
宽数据,最常见的数据组织方式,表格的每一列表示一个变量,每一行表示“列变量”对应的观测值(记录)。比如常见的基因表达量表格就是宽数据的格式,如下图。而长数据则是最常见的绘图数据组织方式,表格的前几列一般表示变量分组(分类),而最后一列则对应的数值。
以R语言为例,基础绘图函数常需要将数据整理成宽数据,而ggplot2以及基于ggplot2的一些绘图函数则需要将数据整理成长数据。长数据非常容易将数据与图形属性(如颜色、大小、形状等)建立映射关系。
2、宽数据转为长数据
想要将宽数据轻松转为长数据,主要用到reshape2包的melt函数,下面就以R语言自带的范例数据airquality为例做演示。
- #载入reshape2包;
- library(reshape2)
- #载入R自带范例数据;
- dt <- airquality
- head(dt,10)
- dim(dt)
复制代码
- #melt()函数及其常用参数;
- melt(data,
- id.vars,
- measure.vars,
- variable.name = "variable",
- value.name = "value")
- #id.vars:表示不需要合并的列(即保留的列);
- #measure.vars:表示需要合并的列;
- #variable.name:表示列名合并后的新列名;
- #value.name:表示数值合并后的新列名;
- #为了方便完整展示数据,这里仅用表格前3行的数据进行演示;
- df <- head(dt,3)
- df
- #将宽数据转成长数据;
- df1 <- melt(df,
- variable.name = "Var",
- value.name = "Value")
- #No id variables; using all as measure variables
- #由于id.vars和measure.vars参数的省略,这里将所有列进行整合;
- head(df1,10)
- dim(df1)
- #[1] 18 2
复制代码
- #选择指定的列,将宽数据转成长数据;
- df2 <- melt(df,
- measure.vars=c("Ozone","Wind","Temp"),
- variable.name = "Var",
- value.name = "Value")
- df2
复制代码
- #选择保留和合并的列,将宽数据转成长数据;
- df3 <- melt(df,
- id.vars=c("Solar.R"),
- measure.vars=c("Ozone","Wind","Temp"),
- variable.name = "Var",
- value.name = "Value")
- df3
复制代码
3、长数据转为宽数据
cast函数下包含:acast or dcast两个函数。前者主要生成 vector/matrix/array,而后者主要生成dataframe。下面主要以上文生成的长数据df2为例,使用dcast()将长数据转成宽数据。
- #dcast()函数及其常用参数;
- dcast(data,
- formula,
- value.var = guess_value(data))
- #formula:“保留的列”~“拆分的列”;
- #value.var:存放数值的列名;
- #查看所使用数据;
- df2
- #将长数据转换成宽数据;
- df4 <- dcast(df2,Solar.R+Month+Day~Var,value.var="Value")
- df4
复制代码
- #尝试丢弃Day变量;
- df5 <- dcast(df2,Solar.R+Month~Var,value.var="Value")
- df5
复制代码
注意,由于df1只有两列,无法直接使用dcast函数,我们可以使用rep(1:3,6)在df1中再添加一列作为formula波浪线前的变量就可以顺利完成转换了。
好啦,本次的分享就到这里啦!
本文作者:基迪奥-莫北
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
|