本章内容:

操纵日期和缺失值

熟悉数据类型的转换

变量的创建和重编码

数据集的排序,合并与取子集

选入和丢弃变量

多说一句,数据预处理的时间是最长的……确实是这样的,额。

4.1一个示例

4.2创建新变量

算术运算符:+、-、*、/、^(**)(求幂)、x %% y(取余运算)、x %/% y(整数除法)。

transform函数:

transform函数现在只用于数据框。对数据框进行操作。

例子:

mydata <- transform(mydata,
sumx = x1+x2,
meanx =(x1+x2)/)
#这里的x1和x2是mydata的两列

对数据框的操作请多用transform函数。

4.3变量的重编码

所谓重编码,就是根据一个变量与其他变量的现有值创建新值的过程。比如:

将一个连续型变量修改为一组类别值

将误编码的值替换为正确值

要进行重编码,可能用到逻辑运算符,逻辑运算符会返回TRUE或者FALSE。

其中,两个逻辑运算符想说一说:

1、书上说浮点型数据慎用 == ,果然是继承了c语言的特点……,不知为何这么说。

2、关于&和&&,&是比较向量中对应关系的所有数,而&&只是比较向量中的第一个数。ps.这里可能涉及到S3、S4面向对象的知识。

下面的函数:

within函数跟with类似,不过可以修改数据框,可是视为transform的替代函数。

比如:

within(data.frame,
{expr})

关于重编码函数,cut()可以将一个数值变量按照值域划分为区间,并返回一个因子。

cut(x, breaks, labels = NULL,
include.lowest = FALSE, right = TRUE, dig.lab = ,
ordered_result = FALSE, ...)
#上面的x是要分割的向量,breaks是一个数或者向量,如若是数的话,
#表明分为具有相应个数水平的因子,如果是向量,那就是规定切分
#的点。dig.lab是几位有效数字,最后一项是是否为有序因子

还提到,car包中的recode函数可以方便的编码数值型、字符型和因子,doBY包中的recodevar()函数是很受欢迎的,试用了recodevar,很方便。

4.4变量的重命名

想要对变量名重命名,可以使用fix()函数,交互式的修改;可以使用reshape包中的rename函数(plyr包中有rename函数……),我一直使用的是 colnames……太麻烦了。

rename(x,c(oldname = "newname",...))

rename函数可以将向量和数据框直接修改名字。当然可以用names来命名,names(x)[1] <- ‘newname’。

4.5缺失值

R中缺失值用NA(Not Available)表示,不可能出现的结果用NaN(Not a Number)表示。is.na()可以判断是否是缺失值。is.na可以作用在向量、数据框上。可以用summary函数来查看一个数据框的情况。

注意:NA是不能比较的,即使是自己跟NA比较也不行,所以判断某个数是NA,a == NA 是不对的,曾经用过 which(data.frame == NA)不出结果,原来是这个原因。所以用 is.na函数才可以。

4.5.1重编码某些值为缺失值

就是说将异常值标为NA

4.5.2在分析中排除缺失值

在进行计算时,很多函数有参数 na.rm = TRUE,就把NA排除在外。当使用函数处理不完整数据时,最好用?函数名 来查看一下是不是有针对缺失值的参数。函数 na.omit()可以将不完整的观测值进行移除,是完全移除一条观测数据!在15章会有更详细的讨论。

4.6日期值

日期值通常以字符串的形式输入到R中,然后转化为以数值形式存储的日期变量。函数as.Date()执行这样的转换,并且可以规定读入数据的格式!!跟我想的不一样啊。

比如,dates <- as.Date(“8/11/2015”,”%m/%d%Y”)将日期按照%m/%d/%Y的格式读取数据并储存。一旦完成这样的转换,就可以对其进行分析、绘图等工作了。

Sys.Date()可以返回当天的日期,而date()可以返回当前日期和时间。

format函数可以接收一个参数,并且按照一定的格式输出。

format(x, trim = FALSE, digits = NULL, nsmall = 0L,
justify = c("left", "right", "centre", "none"),
width = NULL, na.encode = TRUE, scientific = NA,
big.mark = "", big.interval = 3L,
small.mark = "", small.interval = 5L,
decimal.mark = ".", zero.print = NULL,
drop0trailing = FALSE, ...)

上面的各种参数都是在设置输出的格式,用的时候再研究。书上的例子是,format(Sys.Date(),format = “%B %d %Y”).

R语言储存日期是以1970.1.1以来多少天的形式。所以可以做减法,as.Date(“date1”)-as.Date(“date2”).

difftime函数:

difftime(time1, time2, tz,#tz跟时间域有关系
units = c("auto", "secs", "mins", "hours",
"days", "weeks"))

4.6.1日期转换为字符

用as.character即可。

4.6.2更多

两个包lubridate包,fCalendar可以提供日期识别、提取、加减等。

4.7类型转换

下面是判断和转换函数表:

后面的(if-then)结构可以跟is函数结合使用,以便按照不同方式处理数据。话说,有的时候函数需要特定类型的输入,需要强制类型转换。比如数据框的一列数字,但是提取一列以后返回的是因子类型,那么就要进行类型转换。

4.8数据排序

order函数,返回一个位置向量,返回向量从小到大排列的位置。

order(..., na.last = TRUE, decreasing = FALSE)

sort.list(x, partial = NULL, na.last = TRUE, decreasing = FALSE,
method = c("shell", "quick", "radix"))
#参数说明:na.last是说把NA放在最后,decreasing是指升序排列
#partial 部分排序指标向量(还不太理解)

order函数根据两个以上的指标排序,用order(指标1,指标2,…)如果对某个指标按降序排,加符号即可。

4.9数据集的合并

4.9.1添加列

将两个数据框按照某些列合并,两个数据框以某些列联接(成为内联接),就可以进行合并。用的是merge()函数:

merge(x, y, by = intersect(names(x), names(y)),
by.x = by, by.y = by, all = FALSE, all.x = all, all.y = all,
sort = TRUE, suffixes = c(".x",".y"),
incomparables = NULL, ...)
# x,y:用于合并的两个数据框 # by,by.x,by.y:指定依据哪些行合并数据框,默认值为相同列名的列. # all,all.x,all.y:指定x和y的行是否应该全在输出文件. # sort:by指定的列是否要排序. # suffixes:指定除by外相同列名的后缀. # incomparables:指定by中哪些单元不进行合并.

merge函数可以实现SQL中的内联什么的,用的时候好好研究研究。可以用cbind函数合并列,用的很多。

4.9.2添加行

rbind函数,两个数据框变量得相同,但是顺序不一定相同。如果两个数据框列数不同。作如下处理:

1、删除dataframeA中多余变量;

2、向dataframeB中创建追加的变量,并设置为NA。

做个试验发现不对,rbind必须的列数相同。

4.10数据集取子集

4.10.1选入(保留)变量

比较有意思的一个选取,data.frame[paste(“q”,1:5,sep = “”)],挺好玩。数据框后面加列的名字即可。但是要用“”包起来。

4.10.2剔除(丢弃)变量

函数 %in%:

match(x, table, nomatch = NA_integer_, incomparables = NULL)

x %in% table

#参数说明:x是否有与tble中的元素
#nomatch 为匹配是返回的值
#incomparables table中不用匹配的量 #注意:match返回一个长度与x相同的向量,若匹配上,返回其table中的位置;匹配不上
#返回NA;而 %in% 返回一个长度与x相同的向量,匹配上返回TRUE,否则FALSE 例子:
注意这个例子中 d 中有重复值
d <- c(,,,,,)
match(d,c(,,))
d %in% c(,,) 返回:[] NA NA 和 [] TRUE FALSE TRUE TRUE FALSE TRUE 又一个例子:
注意:table中有重复值
d <- c(,,,,)
match(d,c(,,,))
d %in% c(,,,)
返回:
[] NA NA 和 [] TRUE FALSE TRUE FALSE TRUE 看得出来,table中如果有重复值,match返回值中只返回第一次出现的位置。

顺便:pmatch函数:

pmatch(x, table, nomatch = NA_integer_, duplicates.ok = FALSE)
#pmatch 是部分匹配函数
#duplicates.ok 来标注是否匹配上以后将table中匹配上的值删除,默认FALSE是删除
例子:
d <- c(,,,,,)
pmatch(d,c(,,,))
返回:[] NA NA #匹配上20以后将table中的第一个20删除,所以最后一个是值4 pmatch(d,c(,,,),duplicates.ok = TRUE)
返回:[] NA NA #不删除,最后一个值是1 例子:
pmatch("", "") # returns NA
pmatch("m", c("mean", "median", "mode")) # returns NA
pmatch("med", c("mean", "median", "mode")) # returns pmatch(c("", "ab", "ab"), c("abc", "ab"), dup = FALSE) #return NA
pmatch(c("", "ab", "ab"), c("abc", "ab"), dup = TRUE) #return NA #规则:
. 如果可以完全匹配, 则认为匹配上了, 返回table中的位置; . 不满足上述条件, 如果是唯一部分匹配, 则返回table中的位置; . 不满足上述条件, 则认为没有值与其匹配上.

删除变量还可以用 data.frame$colname <- NULL.注意向量这样用是错误的。

4.10.3选入观测

写一下which函数:

which(x, arr.ind = FALSE, useNames = TRUE)
arrayInd(ind, .dim, .dimnames = NULL, useNames = FALSE)
#x是一个逻辑向量或数组,NA视为FALSE,arr.ind 是逻辑向量,表明是不是返回数组的坐标。否则值返回一个数(将一个矩阵或者数据框按列拉成向量,返回这个向量为TRUE的位置),TRUE则返回其每个维度的坐标。useNames 就是是不是出现行列的名字?。。。
     row col
[1,] 2 1
[2,] 1 2
[3,] 2 2
[4,] 3 2
[5,] 4 2
[1,]   2   1
[2,] 1 2
[3,] 2 2
[4,] 3 2
[5,] 4 2 的区别……
which.max 和 which.min 函数,返回最大最小值位置。

4.10.4subset函数

subset函数是选择和观测最简单的方法,下面写一下:

subset(x, subset, select, drop = FALSE, ...)
#x可以是数据框,向量,矩阵,subset是一个逻辑表述,或者说是一个条件,
#select是要选取的部分,drop = TRUE 是将得到的结果组成列表。

4.10.5随机抽样

sample函数:

sample(x, size, replace = FALSE, prob = NULL)
#x是备选向量,n 选取的数量,replace 表示是否有放回抽样,prob是与x长度相等的选取可能性向#量,不一定和为1

此外,sampling包和survey包可以有更多的选择。

4.11使用SQL语句操作数据框

安装好sqldf包就可以愉快的使用sql语句了。

书上说第五章很强大,非常期待。

《R语言实战》读书笔记--第四章 基本数据管理的更多相关文章

  1. R语言实战读书笔记(三)图形初阶

    这篇简直是白写了,写到后面发现ggplot明显更好用 3.1 使用图形 attach(mtcars)plot(wt, mpg) #x轴wt,y轴pgabline(lm(mpg ~ wt)) #画线拟合 ...

  2. R语言实战读书笔记(二)创建数据集

    2.2.2 矩阵 matrix(vector,nrow,ncol,byrow,dimnames,char_vector_rownames,char_vector_colnames) 其中: byrow ...

  3. R语言实战读书笔记(四)基本数据管理

    4.2 创建新变量 几个运算符: ^或**:求幂 x%%y:求余 x%/%y:整数除 4.3 变量的重编码 with(): within():可以修改数据框 4.4 变量重命名 包reshape中有个 ...

  4. R语言实战读书笔记1—语言介绍

    第一章 语言介绍 1.1 典型的数据分析步骤 1.2 获取帮助 help.start() help("which") help.search("which") ...

  5. R语言实战读书笔记2—创建数据集(上)

    第二章 创建数据集 2.1 数据集的概念 不同的行业对于数据集的行和列叫法不同.统计学家称它们为观测(observation)和变量(variable) ,数据库分析师则称其为记录(record)和字 ...

  6. R语言实战读书笔记(八)回归

    简单线性:用一个量化验的解释变量预测一个量化的响应变量 多项式:用一个量化的解决变量预测一个量化的响应变量,模型的关系是n阶多项式 多元线性:用两个或多个量化的解释变量预测一个量化的响应变量 多变量: ...

  7. R语言实战读书笔记(六)基本图形

    #安装vcd包,数据集在vcd包中 library(vcd) counts <- table(Arthritis$Improved)counts # 垂直barplot(counts, main ...

  8. R语言实战读书笔记(五)高级数据管理

    5.2.1 数据函数 abs: sqrt: ceiling:求不小于x的最小整数 floor:求不大于x的最大整数 trunc:向0的方向截取x中的整数部分 round:将x舍入为指定位的小数 sig ...

  9. R语言实战读书笔记(一)R语言介绍

    1.3.3 工作空间 getwd():显示当前工作目录 setwd():设置当前工作目录 ls():列出当前工作空间中的对象 rm():删除对象 1.3.4 输入与输出 source():执行脚本

随机推荐

  1. [Ljava.lang.String; cannot be cast to java.lang.String报错的原因

    完整错误信息: java.lang.ClassCastException: [Ljava.lang.String; cannot be cast to java.lang.String 报这个错的原因 ...

  2. 【转载】最长回文字符串(manacher算法)

    原文转载自:http://blog.csdn.net/lsjseu/article/details/9990539 偶然看见了人家的博客发现这么一个问题,研究了一下午, 才发现其中的奥妙.Stupid ...

  3. C指针——简单总结

    简介: 指针变量在使用前,必须指向具体的有效的内存单元 指针变量在使用前不但要定义还要初始化 四个方面:指针的类型,指针指向的类型,指针的值或者指针所指向的内存区,指针本身所占的内存区 int *pt ...

  4. [Bzoj2246]迷宫探险(概率+DP)

    Description 题目链接 Solution 用三进制表示陷阱状态,1表示有害,2表示无害,0表示不知道 用\(f[S][i]\)表示状态为S时陷阱i有害的概率,这个可以预处理出 \(d[S][ ...

  5. Android 中的反调试技术

    比较简单的有下面这两种 调试端口检测, 23946(0x5D8A) Demo: void CheckPort23946ByTcp() { FILE* pfile=NULL; char buf[0x10 ...

  6. GPIO基础知识

    STM32 GPIO入门知识 GPIO是什么? 通用输入输出端口,可以做输入,也可以做输出.GPIO端口可通过程序配置成输入或输出. 引脚和GPIO的区别和联系 STM32的引脚中,有部分是做GPIO ...

  7. hihocoder1014 : Trie树

    #1014 : Trie树 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 小Hi和小Ho是一对好朋友,出生在信息化社会的他们对编程产生了莫大的兴趣,他们约定好互相帮助, ...

  8. MD5--3D模型

    在学习Away3D的过程中,接触到MD5模型和MD5动画这样两个词.之前对MD5的认识就是一种加密技术,怎么它又和动画扯上关系了呢. 一阵谷歌之后,终于在这个地方发现了关于3D方面的MD5介绍了:ht ...

  9. 【java下午茶系列】java三重奏之封装

      java中的封装.继承.多态可谓是踏入这一行业的必经之槛,诸多新人在不明就里的情况下将其各种概念背的是滚瓜烂熟.即便是工作多年之后,也不见得能说出个所以然,或许冥冥之中已经写过无数封装的代码,只是 ...

  10. Git——1.简介

    关于版本控制 Git基础 安装Git 初始运行Git前的配置 获取帮助 关于版本控制 版本控制(VCS)是一种记录一个或若干文件内容变化,以便将来查阅特定版本修订情况的系统. 本地版本控制系统 大多都 ...