在实际应用中长宽矩阵转换运用广泛,网络上资料也很繁多,但很少见简洁明了的将其应用展示清楚,本文根据实际使用,将长宽矩阵举例说明。
上图左边是长数据(针对type列),右图是将pop转换后的宽数据,这种长宽数据变化在我们数据处理中非常常见。使用比较久的就是 reshape2 包(现在新包 tidyr 更方便,本文以常用的 reshape2 为主 tidyr 此处不在赘述)
reshape2主要有两个应用函数:
- melt:可以将宽数据转化为长数据
- cast:可以将长数据转化为宽数据
1)宽数据转换长数据
我们用系统自带的airquality数据集做测试,如下为一个宽数据
用melt将其转化为长数据,如果我们没有指定将那几个指定为变量,默认将所有的列作为变量
我们也可以选择几个作为变量来整合剩下的为长数据
这里我们看到用”Month”, “Day”作为变量(可以认为是保留列),剩下的几列都将整合到列名:climate_variable,对应的值到:climate_value
2)长数据转宽数据
实际应用中,我们在合并数据时可能遇到各种情况,下面给大家一个通用解决方案:
dcast(
data,
# 参考上面的方法定义
V1 ~ V2,
# 对于缺失部分定义
fill = "-",
# 对于合并时,存在多个重复值时处理方案,此处是用合并的方式处理
fun.aggregate = function(x) {
paste0(x, collapse = ";")
}
)
最后提一句, tidyr 在长宽数据处理上更便捷,可以看下官方的学习卡片:
参考资料:
1.https://tidyr.tidyverse.org/
2.http://had.co.nz/reshape/
3.https://seananderson.ca/2013/10/19/reshape/