首页 > > > 【R语言】:基本数据管理(1)
操纵日期和缺失值
熟悉数据类型的转换
变量的创建和重编码
数据集和排序,合并与取子集
选入和丢弃变量
参考书籍:《R语言实战(第2版)》第四章
本文代码运行环境为Windows版RStudio
无论是创建新变量或者对现有的变量进行变换,都可以通过表达式给给新变量赋值,表达式可以包含多种运算符和函数,可用来创建公式。R语言中的常用运算符有加(+)、减(-)、乘(*)、除(/)、求幂(^或**)、取余运算(x %% y)、整数除法(x %/% y),详见下图。

下面举例说明如何将两个新变量整合到原有数据框中。目前有一个名称为mydata 的数据框,其中的变量为向量x1和向量x2,现在创建一个新变量sumx存储向量x1和向量x2两个变量的和,并创建另外一个新变量meanx存储向量x1和向量x2两个变量的平均值。
总共有三种方法可以实现,具体代码如下,代码中$符号的用法——即如何确定数据框中某一变量的方法详见【R语言】:数据结构入门(2),代码中的注释详细说明了每一种方法。
#创建数据框mydata,x1和x2是mydata的两个列向量
mydata <- data.frame(x1 = c(2, 2, 6, 4), x2 = c(3, 4, 2, 8))
#方法一,用符号$确定数据框中的变量x1和x2,并且赋值给两个新变量sumx和meanx并添加至数据框
mydata$sumx <- mydata$x1 + mydata$x2
mydata$meanx <- (mydata$x1 + mydata$x2)/2
#方法二,利用函数 attach() 数据框mydata添加到搜索路径,这时将在数据框mydata中确定变量x1和x2,最后利用函数detach()从搜索路径移除
attach(mydata)
mydata$sumx <- x1 + x2
mydata$meanx <- (x1 + x2)/2
detach(mydata)
#方法三,利用transform函数对数据框mydata增加两个变量(列向量)sumx和meanx,并把结果存储在数据框mydata中
mydata <- transform(mydata, sumx = x1 + x2, meanx = (x1 + x2)/2)《R语言实战(第2版)》书中建议选择方法三,transform函数简化了按需创建新变量并将其保存到数据框中的过程。
重编码的含义:根据一个变量和/或其他变量的现有值创建新值的过程。
进行重编码,需要在R语言中用到逻辑运算符,逻辑运算符会返回TRUE或者FALSE,具体详见下表(截图来自《R语言实战(第2版)》第四章)。

注:比较浮点型数据(由一个整数、有理数或有效数字,即尾数,乘以某个基数的整数次幂,类似科学计数法)时尽量不要使用“==”,以免出现误判。
接来下,《R语言实战(第2版)》书中提到了用within()函数修改数据框,关于transform函数和within函数的区别和用法详见文章:【R语言】:transform函数与with/within函数。
此外,函数cut()可以将一个数值变量按照值域划分为区间,并返回一个因子,在RStudio中输入代码help("cut")可查看该函数帮助文件。

car包中的函数recode()也可以方便对数值型、字符型和因子重新编码,还有doBY包中的函数recodevar()也常常用到,可以通过函数help查看两者的详细用法。
重新命名已有的变量名可以使用函数fix(),比如如果修改上面的数据框mydata,可以输入代码
fix(mydata)RStudio中运行代码后,弹出了一个交互式的窗口,修改变量名称非常方便,如下图


rename(mydata, c(x1 = "x1-1", x2 = "x2-1"))运行代码后,数据框mydata的变量名更换,如下图



可以一次更改多个变量名称,比如把数据框mydata中的四个变量名称全部更改,方法如下

在R语言中,缺失值用符号NA表示,NA是Not Available的缩写;不可能出现的值(比如0做除数的结果)用符号NaN表示,NaN是Not a Number的缩写。
函数is.na()用来检测向量或数据框是否存在缺失值,返回值是TRUE或FALSE,表示存在或不存在。举例说明,输入以下代码
x <- c(1, 2, 3, NA)
is.na(x)运行代码后可得


一、重编码某些值为缺失值
在变量的重编码这一小节中提到过,可以将某些明显错误的值重编码为缺失值NA。比如,假如在某一数据框persondata中变量age(年龄)中的错误值999,将错误值更改为缺失值,可以输入代码
persondata$age[persondata$age == 999] <- NA运行以上代码后,数据框persondata的变量age中所有等于999的年龄值将全部被修改为NA。在进行数据分析之前,一定要确保所有的错误数据或缺失数据都已经被更改为缺失值NA,否则分析结果将没有任何意义。
二、在分析中排除缺失值
在数据分析之前,还需要删除前面已经更改为缺失值NA的数据,因为含有缺失值NA的算数表达式和函数的计算结果也会被判定为缺失值NA。上面的例子中,向量x中第四个元素含有缺失值NA,如果输入代码
x <- c(1, 2, 3, NA)
y <- sum(x)运行代码后,y也是缺失值NA。
很多函数都有na.rm=TRUE选项,可以在计算前删除缺失值NA后计算剩下的值,再以下代码
x <- c(1, 2, 3, NA)
y <- sum(x, na.rm=TRUE)运行代码后,y等于6。
*注:强烈建议每次在使用函数处理数据前通过函数help查看其帮助文档,确定该函数的处理缺失值的选项是什么,不一定都是na.rm=TRUE。
此外,可以通过函数na.omit()删除含有缺失值NA的行,即行删除——删除所有含有缺失数据的观测。比如,还是以上面的数据框persondata为例,用函数na.omit删除缺失值NA的观测(行删除)并存储为新的数据框persondata_new,代码如下
persondata_new <- na.omit(persondata)*注:当缺失值较多,或者一小部分变量中包含大量的缺失数据,行删除可能会剔除相当比例的数据,所以在实际应用之前应该仔细思考。
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/31537575/viewspace-3123864/ ,如需转载,请注明出处,否则将追究法律责任。