其他
掌握数据处理精髓的起手式:长数据框与宽数据框之间的完美转变!
掌握数据处理精髓的起手式:长数据框与宽数据框之间的完美转变!
介绍
本文介绍了三种实现长数据框与宽数据框之间的转变的方法。即实现二维数据与一维数据间的来回切换。
分别为reshape2包的melt()和dcast()函数;tidyr包的gather()和spread()函数;tidyr包的pivot_longer()和pivot_wider()函数
正文部分
数据构建
## R数据处理基础-表格的变换(长数据框与宽数据框间的转变)
## Time: 20240319
## Author: xiaohe
## Notes: zhenzhen
## 数据构建
data<-data.frame(No=c("Sample_1","Sample_2","Sample_3","Sample_4"),
Yesterday=c(1,3,5,7),
Today=c(2,4,6,8),
Tomorrow=c("a","b","c","d"))
宽数据框转变为长数据框
## 宽数据框转化为长数据框
# method 1: melt(reshape2包)
data_melt<-reshape2::melt(data = data,id.vars="No",variable.name="Time",value.name = "Value")
# method 2: gather(tidyr包)
data_gather<- tidyr::gather(data,Time,Value,-No)
# method 3: pivot_longer(tidyr包) 该方法需要所有的Value都为同一类型,而我的Value中存在abcd字符,故需要多一步数据转换
data_1<-dplyr::mutate_all(data,as.character) # 将数据框所有数据转化为字符型
data_longer<-tidyr::pivot_longer(data_1,cols=-No,names_to = "Time",values_to = "Value")
# 注意该方法可能会将第一列进行系统默认排序
长数据框转变为宽数据框
## 长数据框转化为宽数据框
# method 1: dcast(reshape2包)
data_dcast<-reshape2::dcast(data_melt,No~Time,value.var="Value")
# method 2: spread(tidyr包)
data_spread<-tidyr::spread(data_gather,Time,Value)
# method 3: pivot_wider(tidyr包)
data_wider<-tidyr::pivot_wider(data_longer,names_from = Time,values_from = Value)
备注
大家有兴趣可加群,欢迎交流学习,共同进步!
若群链接失效,可在本公众号内的对话框回复关键词【R语言学习交流群】
若您觉得本文有帮助,帮忙点击点赞和在看是对我最大的鼓励和支持!