[2022-10-24]用R做行列互转

行列互转问题

先前总结过用MySQL解决行列互转问题的基本思路:

https://www.jianshu.com/p/5e1fdd34a739 [2022-10-07-mysql学习]行列互转问题

最近打算认真学学tidyR,发现用R解决这个问题非常高效。

示例数据

https://leetcode.cn/problems/reformat-department-table/

id revenue month
1 8000 Jan
2 9000 Jan
3 1000 Feb
1 7000 Feb
1 6000 Mar

数据集department

行转列

new_department<-spread(department,key=month,value=revenue)
new_department

运行结果:

id Feb Jan Mar
1 7000 8000 6000
2 NA 9000 NA
3 1000 NA NA

列转行

gather(new_department,key=month,value=revenue,-id)

运行结果:

id month revenue
1 Feb 7000
2 Feb NA
3 Feb 1000
1 Jan 8000
2 Jan 9000
3 Jan NA
1 Mar 6000
2 Mar NA
3 Mar NA

通过na.rm参数去除NA值:

gather(new_department,key=month,value=revenue,-id,na.rm=TRUE)

运行结果:

id month revenue
1 Feb 7000
3 Feb 1000
1 Jan 8000
2 Jan 9000
1 Mar 6000

附注

示例数据原本的形式又被称为整洁格式或长数据,而行转列后的数据则被称为宽松格式或宽数据,前者是与tidy R适配度更高的数据格式,但后者也有结构清晰、便于记录等优点。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容