R语言进阶之四:数据整形(reshape) 您所在的位置:网站首页 r语言中merge R语言进阶之四:数据整形(reshape)

R语言进阶之四:数据整形(reshape)

2023-10-08 11:18| 来源: 网络整理| 查看: 265

从不同途径得到的数据的组织方式是多种多样的,很多数据都要经过整理才能进行有效的分析,数据整形不仅仅是为了改善数据的外观,也是进行一些统计分析和作图前必要的步骤。数据整形和 数据凝练/汇总往往密不可分,这是门学问,是R语言数据处理的内容之一。 一、通过重新构建数据进行整形 数据整形最直接的思路就把数据全部向量化,然后按要求用向量构建其他类型的数据。这样是不是会产生大量的中间变量、占用大量内存?没错。R语言的任何函数(包括赋值)操作都会有同样的问题,因为R函数的参数传递方式是传值不传址,变量不可能原地址修改后再放回原地址。 矩阵和多维数组的向量化有直接的类型转换函数: as.vector,向量化后的结果顺序是先列后行再其他:

> (x as.vector(x)[1] 1 2 3 4> (x as.vector(x)[1] 1 2 3 4 5 6 7 8

列表向量化可以用unlist,数据框本质是元素长度相同的列表,所以也用unlist:

> (x unlist(x)x1 x2 x3 y1 y2 y3 y4 y5 y6  1  2  3  5  6  7  8  9 10 > x unlist(x)x1 x2 x3 y1 y2 y3  1  2  3  5  6  7

其他类型的数据一般都可以通过数组、矩阵或列表转成向量。一些软件包有自定义的数据类型,如果考虑周到的话应该会有合适的类型转换函数。 二、transform 和 within函数 transform 函数对数据框进行操作,作用是为原数据框增加新的列变量。但应该注意的是“原数据框”根本不是原来的那个数据框,而是一个它的拷贝。下面代码为airquality数据框增加了一列log.ozone,但因为没有把结果赋值给原变量名,所以原数据是不变的:

> head(airquality,2)  Ozone Solar.R Wind Temp Month Day1    41     190  7.4   67     5   12    36     118  8.0   72     5   2> aq head(airquality,2)  Ozone Solar.R Wind Temp Month Day1    41     190  7.4   67     5   12    36     118  8.0   72     5   2> head(aq,2)  Ozone Solar.R Wind Temp Month Day log.ozone1    41     190  7.4   67     5   1  3.7135722    36     118  8.0   72     5   2  3.583519

transform可以增加新列变量,可以改变列变量的值,也可以通过NULL赋值的方式删除列变量:

> aq head(aq,2) Solar.R Wind Temp Month Day log.ozone1 190 54.76 67 5 1 3.7135722 118 64.00 72 5 2 3.583519

> aq head(aq,2) Solar.R Wind Temp Day log.ozone1 190 54.76 67 1 3.7135722 118 64.00 72 2 3.583519

within 比 transform 灵活些,除数据框外还可以使用其他类型数据,但用法不大一样,而且函数似乎也不够完善:

> aq



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有