#### 数据整理 科学实验原始数据格式多种多样,这给数据处理分析带来困难。如果有一个统一的数据格式,可以降低数据的复杂性,便于理解和交流,也给统计程序开发者提供方便,增加数据逻辑的使用范围。庆幸的是,科学数据都可以转化为字段和记录两向列表的形式。这个两向表遵循以下三条规则: * 列代表变量(或字段),每个变量一列 * 行代表观测(或记录),每个观测值一行 * 每个单元格代表该变量在该观测中的观测值 这是日常生活和科研记录中的常用记录数据形式,但为了节省纸张、或者为了数据紧凑直观,有时候也不这样记录,特别是对于多因素试验的情况。比如,这个表: 为了数据分析的需要,需要先将这种形式的数据转化为上述标准格式。这个过程叫做数据整理(tidy),整理好的标准数据也叫做tidy数据。 ##### tidyverse、tidyr tidyverse是用于数据整理的R包。 安装:install.packages('tidyverse') 或者安装其轻量版本 install.packages("tidyr") 如想使用最新版本,可以从源码安装: install.packages("devtools") devtools::install_github("tidyverse/tidyr") 使用: library('tidyr') #### 筛选记录(filter) filter(flights, month == 1, day == 1) 比较运算符:>, >=, <, <=, != (不等于), and == (等于). 注意,等于是==而不是=,前者是比较运算符,后者是赋值运算符,这一点容易出错。 另外需要注意的是在使用==比较浮点数时,计算机提供的有限精度的近似而不是绝对精确的数值(物质的有限可分性原理) sqrt(2) ^ 2 其实并不等于2,测试一下: ```{r} sqrt(2) ^ 2 #> [1] FALSE 1/49 * 49 == 1 #> [1] FALSE ``` 这时不要使用==,代之以near()函数: ```{r} near(sqrt(2) ^ 2, 2) #> [1] TRUE near(1 / 49 * 49, 1) #> [1] TRUE ``` 逻辑运算符:|、& 、!、xor filter(flights, month == 11 | month == 12)