以成绩表为例,宽数据形式将每个样本信息放在一行,直观且常见。长数据则用姓名与班级作为标识,所有科目成绩合并一列,通过新变量“科目”标识,虽不直观,但在数据处理时更为方便。转换宽数据为长数据可使用R中的gather函数,转换长数据为宽数据则使用spread函数。两者均来自tidyr工具包。gather函数将宽数据转换为长数据,spread函数为gather函数的逆向操作,实现宽数据的转换。若长数据中出现缺失值,如2班的李四英语成绩,可通过fill参数设置,例如记为0。此外,pivot_longer和pivot_wider这两个函数也是tidyr包的一部分,但个人认为其参数不如gather和spread直观。melt和cast函数来自reshape工具包或其升级版reshape2,这两个函数早于spread和gather出现。spread和gather作为后来者,功能更全面,使用更方便,但省略了部分功能。在数据处理时,melt函数与gather功能相同,但在用法上有所区别,例如id.vars和measure.vars用于指定标识变量和折叠变量名,而gather函数通过...指定折叠变量。melt函数指定变量需要加双引号,而gather无需。在reshape工具包中,melt函数只能处理data.frame数据结构,而不能处理tibble数据结构,但reshape2中的melt函数可处理tibble。通过readxl导入的数据默认为tibble,需要进行格式转换。cast函数与spread类似,但功能更多,通过formula参数实现数据转换,表达式形式为y1 + y2 + ... ~ x1 + x2 + ...,~左边为标识变量,~右边为存放折叠变量的标识,不在表达式中的变量为汇总变量,可指定汇总函数。在长数据向宽数据转换时,cast函数尤其有用。当标识变量能唯一指定样本时,cast可实现分类汇总。反之,同时进行数据转换与分类汇总。使用reshape2工具包无需进行格式转换。在选择转换函数时,gather和spread目前是首选,但未来可能被pivot_longer和pivot_wider取代,特别是涉及分类汇总时,cast函数是更优选择。
温馨提示:答案为网友推荐,仅供参考