打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
R语言长数据和短数据相互转换

    长数据和短数据的转换在整理数据中是蛮重要的。reshape2包cast函数和tidyr包spread函数将长数据转成宽数据,reshape2包中melt函数和tidyr包gather函数将短数据转成长数据。

    cast函数有dcast和acast,前者是转换为data.frame,后者是转换为array或者matrix。主要用法是:cast(data,formula,fun),这里data就是需要转换的长数据,formula的格式是rowvar1+rowvar2+....~colvar1+colvar2+........,fun的默认函数是length,如果没有fun,输出的是原本的value。

    spread的用法是spread(data,key,value,fill=),data是需要转换的长数据,key是将该列的变量值转换为短数据的变量名,value是指长数据的value列的值来填充短数据各列(value只能是单个变量),fill=NA是将缺失值传递一个指定值。

    melt的用法是melt(data,id.vars,measure.vars,variable.name),data是需要转换的短数据,id.vars是行变量,measure.vars是列变量,variable.name是对长数据的新变量赋名字。

   gather的用法是gather(data,key,value,...),data是需要转换的短数据,key是将短数据转换的列名赋值给一个新变量的名字,value是短数据转换的列的具体值赋值给一个新变量的名字,...中还可以写上需要转换的列。


下面给出一个实例。数据一共有45个观测,6个变量,X00-X03是一天四次的测量值。

代码块

library(data.table)
library(reshape2)
library(tidyr)
shuju<>'C:\\Users\\lenovo\\Desktop\\shuju.csv')
shuju<>-1]
################将长数据转成短数据
#tidyr包中spread
spread_data<>
for(i in 0:3){
 fun<>
spread_data<>1:2,i+3)],key='測項',value=paste('X0',i,sep=''))
}
spread_data<>
}

##reshape2包中cast
cast_data<>
for(i in 1:4){
 fun<>
cast_data<>1:2,i+2)],日期~測項)
 }
 cast_data<>
}

#########将短数据转成长数据
###tidyr包中gather
#因为原数据中每一天有测量四次的数据,转换成长数据之前先排序
spread_data_sort<>
gather_data1<>1,5,9),],测项,X00,-日期)
gather_data2<>2,6,10),],测项,X01,-日期)
gather_data3<>3,7,11),],测项,X02,-日期)
gather_data4<>4,8,12),],测项,X03,-日期)
gather_data<>

#####reshape2包中melt
melt_data1<>1,5,9),],id='日期',value.name = 'X00')
melt_data2<>2,6,10),],id='日期',value.name = 'X01')
melt_data3<>3,7,11),],id='日期',value.name = 'X02')
melt_data4<>4,8,12),],id='日期',value.name = 'X03')
melt_data<>


如果需要代码中的shuju.csv,可以留下你的邮箱~~~~~~~~

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
tidyverse —— tidyr包
R语言 | 数据操作tidyr包
“了不起的R语言”第六课:tidyr包的应用
长数据与宽数据的转换丨数析学院
Tidyverse|tidyr数据重塑之gather,spread(长数据宽数据转化)
30 天学会R DAY 15:tidyr包,数据整理另外一个利器
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服