《R语言实战》笔记系列
本章学习大纲
1.操纵日期和缺失值
2.熟悉数据类型和转换
3.变量的创建和重编码
4.数据集的排序、合并与取子集
5.舍弃(剔除)变量
第一部分 操纵日期和缺失值
缺失值
在R中,缺失值以符号NA(not available,不可用)表示。可以用函数is.na()检查缺失值是否存在。需要注意两点,一是缺失值被认为是不可比较的,意味着不能用比较运算符来检测缺失值的存在。二是R并不将无限的或者不可能出现的数值标记为缺失值。正无穷和负无穷分别用Inf和-Inf来标记。不可能的值用NaN来标记。若要识别这些数值,需要用is.infinite()或is.nan()来识别。

重编码某些值为缺失值
有些数据并没有直接将缺失值标记为NA,可能用某个与实际不符合的数据填充,比如说年龄为999。所以需要我们分析数据集前将这些数据表示为缺失值,否者会影响数据分析。需要用重编码来完成这项工作,例如:leadership$age(leader$age==999)<-NA
在分析中排除缺失值
凡是含有缺失值的算术表达式和函数的计算结果均为缺失值。可以用na.rm=TRUE选项,在计算之前移除缺失值并使用剩余的值进行计算。也可以通过函数na.omit()直接移除所有含有缺失值的观测。

日期值
日期值通常以字符串的形式输入到R中,然后转化为以数值形式存储的日期变量。函数as.Date()用于执行该转化,一般形式是as.Date(x,"input-format"),其中x是字符型数据,input-format则是用于读入日期的适当格式


日期值的默认输入格式是yyy-mm-dd。将默认格的字符型数据改成对应的格式,需要用as.Date()如图所示。

除此之外,Sys.Date()可以返回当天的日期,date()可以返回当前的日期和时间。也可以用函数format(x,format="output-format"来输出指定格式的日期值,并且可以提取日期值中的某些部分。format()接受算数运算的,也可以用difftime()来计算时间间隔,并以星期、天、时、分、秒来表示。

也可以用as.character()将日期值转换为字符型。进行转换后,就可以使用一系列字符处理函数处理数据(如取子集、替换、连接等)。

第二部分 熟悉数据类型和转换

第三部分 变量的创建和重编码
创建新变量常用的语句是 变量名<-表达式,经常表达式包含以下的算术运算符。

创建新变量并整合到数据集中,需要用transform()函数。

变量的重编码是指根据同一变量和/或其他变量的现有值创建新值得过程。可以将一个连续型变量修改成一组类别值;也可以将误编码的值替换成正确值;或者将一组分数线创建一个表示及格、不及格的变量。要重编码数据,可以用R的逻辑运算符。

可以用语句variable[condition]<-expression进行重编码,意思是将仅在condition的值为TRUE时执行赋值。
可以通过函数names()对变量进行重命名。如names(leadership)[2]<-"testDate"
第四部分 数据集的排序、合并与取子集
数据集的排序
可以用order()函数来对一个 数据框进行排序。

数据集的合并
向数据框添加列:要横向合并两个数据集,用merge()函数。多数情况下,两个数据框是通过一个或多个共有变量进行联结的(即内联结,inner join)例如total<-merge(dataframeA,dataframeB,by="ID").如果直接横向合并两个矩阵或数据框,并且不需要一个公共索引,可以用cbind()函数,但必须保证两个对象有着相同的行数。例如:total<-cbind(A,B)
向数据框添加行:用rbind()函数。两个数据框必须有相同的变量,如果不相同,应该对其中一个数据框删除多余变量或对另一个添加新的变量标记为NA。两者数据框的顺序不一定要相同。
数据集取子集
第二章已经提及过,通过dataframe[row indices,colum indices]来访问的。

第五部分 选入和舍弃(剔除)变量
舍弃变量的核心思想其中之一就是将变量逻辑性变为FALSE,则不会显示参与运算。有以下三种办法,最后一种会损坏原数据。

用subset()函数是选择变量和观测最简单的办法。

用sample()函数可以让你从数据集中(有放回或无放回地)抽取大小为n的一个随机样本。函数第一个参数代表是由要从中抽样的元素组成的向量,第二个参数是要抽取的元素数量,第三个参数代表无放回抽样(FALSE)。

网友评论