ITPub博客

首页 > > > 【R语言】:基本数据管理(1)

【R语言】:基本数据管理(1)

作者:浪花小雨滴 时间:2020-06-17 10:33:57 0 删除 编辑
操纵日期和缺失值
熟悉数据类型的转换
变量的创建和重编码
数据集和排序,合并与取子集
选入和丢弃变量
参考书籍:《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函数简化了按需创建新变量并将其保存到数据框中的过程。

变量的重编码

重编码的含义:根据一个变量和/或其他变量的现有值创建新值的过程。

  • 修改变量的类型,比如把年龄这种连续型数字变量修改为“年轻人、中年人、老年人”这种类别型变量。
  • 将错误编码的值替换为正确值,比如将变量年龄中某一个明显的错误值999更改为缺失值。

进行重编码,需要在R语言中用到逻辑运算符,逻辑运算符会返回TRUE或者FALSE,具体详见下表(截图来自《R语言实战(第2版)》第四章)。

注:比较浮点型数据(由一个整数、有理数或有效数字,即尾数,乘以某个基数的整数次幂,类似科学计数法)时尽量不要使用“==”,以免出现误判。


接来下,《R语言实战(第2版)》书中提到了用within()函数修改数据框,关于transform函数和within函数的区别和用法详见文章:【R语言】:transform函数与with/within函数。

此外,函数cut()可以将一个数值变量按照值域划分为区间,并返回一个因子,在RStudio中输入代码help("cut")可查看该函数帮助文件。

其中,x是待划分的向量;breaks可以是数或者向量,若为数字(很明显,应大于等于2),表示将把向量分为多少个(该数字)因子,若为向量,就等于确定了划分的点;dig.lab确定有效数字是多少位;ordered_result为“真”表示为有序因子,反之为“否”。

car包中的函数recode()也可以方便对数值型、字符型和因子重新编码,还有doBY包中的函数recodevar()也常常用到,可以通过函数help查看两者的详细用法。

变量的重命名

重新命名已有的变量名可以使用函数fix(),比如如果修改上面的数据框mydata,可以输入代码

fix(mydata)

RStudio中运行代码后,弹出了一个交互式的窗口,修改变量名称非常方便,如下图

如果想采用编程的方法修改变量名(为什么要用麻烦的方法?情怀么...),可以使用reshape包中的函数rename(),帮助文件截图如下

参数replace应该如何处理?通过Google查询后发现,利用c(oldname = "newname", ...)来进行替换。举例说明,比如将数据框mydata中的变量名x1更换为x1-1,变量名x2更换为x2-1,代码如下

rename(mydata, c(x1 = "x1-1", x2 = "x2-1"))

运行代码后,数据框mydata的变量名更换,如下图

另外一种重命名变量的办法是使用函数names(),帮助文件截图如下

如果把数据框mydata中的第二个变量x2的名称更改为x2-1,方法如下

首先运行函数names加原始数据结构(这里为数据框mydata),确定数据结构中每个变量的序列;接下来后面增加中括号[]加上序列数字(比如修改第二个变量,就是数字2),赋值新的变量名称。

可以一次更改多个变量名称,比如把数据框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不可比较,即使NA跟自己比较也不行,就是说某变量A == NA的结果永远无法得出结果TRUE,只有用函数is.na()才可以得到TRUE或FALSE。

一、重编码某些值为缺失值

在变量的重编码这一小节中提到过,可以将某些明显错误的值重编码为缺失值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/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2018-05-16

  • 博文量
    4259
  • 访问量
    39963