【学习】《R实战》读书笔记(第四章)

读书会是一种在于拓展视野、宏观思维、知识交流、提升生活的活动。PPV课R语言读书会以“学习、分享、进步”为宗旨,通过成员协作完成R语言专业书籍的精读和分享,达到学习和研究R语言的目的。读书会由辅导老师或者读书会成员推荐书籍,经过讨论确定要读的书,每个月读一本书且要精读,大家一起分享。

第四章 基本数据管理

本章概要

1操作数据和缺失值。

2明白数据类型转换

3创建和重命名变量

4排序、合并和子数据集

5选择和删除变量

本章所介绍内容概括如下。

把数据导入矩阵或者数据框仅是数据分析准备的第一步,花在数据分析的60%的时间用在为分析所做的数据准备。

一个工作例子

案例:研究男女管理者领导他们组织的差异。

数据集(数值5、4、3、2和1分别表示强烈反对、反对、中立、支持、强烈支持)如图1所示。

图1:不同性别的领导行为

如何把图1的中数据导入R,对这些数据,我们有什么发现呢?

创建新的变量

一些场景,我们需要创建新的变量,形式如下:

newvariable <- expression

算术运算如图2所示。

图2: R 算术运算符号

举例说明如下

> rm(list=ls())

> 10+3

[1] 13

> 10-3

[1] 7

> 10*3

[1] 30

> 10/3

[1] 3.333333

> 10^3

[1] 1000

> 10**3

[1] 1000

> 10%%3

[1] 1

> 10%/%3

[1] 3

在数据框中加入新变量有三种方法,举例说明如下。

方法一:

> rm(list=ls())

> mydata<-data.frame(x1=c(2,2,6,4),x2=c(3,4,2,8))

> mydata$sumx <- mydata$x1 + mydata$x2

> mydata$meanx <- (mydata$x1 + mydata$x2)/2

> mydata

x1 x2 sumx meanx

1 2 3 5 2.5

2 2 4 6 3.0

3 6 2 8 4.0

4 4 8 12 6.0

方法二:

> rm(list=ls())

> mydata<-data.frame(x1=c(2,2,6,4),x2=c(3,4,2,8))

> attach(mydata)

> mydata$sumx <- x1 + x2

> mydata$meanx <- (x1 + x2)/2

> detach(mydata)

> mydata

x1 x2 sumx meanx

1 2 3 5 2.5

2 2 4 6 3.0

3 6 2 8 4.0

4 4 8 12 6.0

方法三:

> rm(list=ls())

> mydata<-data.frame(x1=c(2,2,6,4),x2=c(3,4,2,8))

> mydata<-transform(mydata, sumx=x1+x2, meanx=(x1+x2)/2)

> mydata

x1 x2 sumx meanx

1 2 3 5 2.5

2 2 4 6 3.0

3 6 2 8 4.0

4 4 8 12 6.0

重编码变量

R逻辑运算符号如图3所示。

图3:R逻辑运算符号

基于逻辑运算符号关系来改变变量中内容,逻辑值为真,则可以修改。

拓展可以了解within()函数和car包中的recode()函数。

重命名变量

重命名变量名,可以采用方法。

方法一:fix()函数。

方法二:包reshape中的rename()函数。

方法三:names()函数。

缺失值

数据集往往是不完整,因为各种缘由存有缺失值。

使用is.na()函数检查缺失值。

> rm(list=ls())

> x <- c(1,2,NA,3)

> is.na(x)

[1] FALSE FALSE TRUE FALSE

数据集中某些变量值 设置为NA

从数据 集中移除缺失值

> rm(list=ls())

> x <- c(1, 2, NA, 3)

> y <- sum(x, na.rm=TRUE)

> x

[1] 1 2 NA 3

> y

[1] 6

> sum(x)

[1] NA

可以使用na.omit()函数删除不完整的观察。

日期值

用函数as.Date()设置日期格式。

日期常用格式如下

%d 1-31

%a Mon

%A Monday

%m 00-12

%b Jan

%B January

%y 14

%Y 2014

> today <- Sys.Date()

> today

[1] “2014-06-17″

> format(today, format=”%B %d %Y”)

[1] “六月 17 2014″

> today <- Sys.Date()

> dob <- as.Date(“1984-11-03″)

> difftime(today, dob, units=”days”)

Time difference of 10818 days

类型转换

类型转换函数如图4所示:

图4:R类型转换函数

> rm(list=ls())

> a <- c(1,2,3)

> a

[1] 1 2 3

> is.numeric(a)

[1] TRUE

> is.vector(a)

[1] TRUE

> is.factor(a)

[1] FALSE

> a <- as.character(a)

> a

[1] “1″ “2″ “3″

> is.numeric(a)

[1] FALSE

> is.character(a)

[1] TRUE

有序数据

使用order()函数

数据集合并

添加列,使用merge()函数或者cbind()

添加行,使用rbind()函数

子数据集

选择变量

移除变量

选择观察

用subset()函数

随机抽样sample()函数

用SQL操作数据框

使用包sqldf中的sqldf()函数基于SQl的查询语句操作数据框。

总结

1操作数据和缺失值。

2明白数据类型转换

3创建和重命名变量

4排序、合并和子数据集

5选择和删除变量

Resource:

1 http://www.wangluqing.com/2014/06/r-in-action-note5/

2 《R in action》第一部分第四章

本栏目文章由PPV课R语言读书会提供,转载请注明来自PPV课R语言读书会。

版权所有,违者必究!

原文发布于微信公众号 - PPV课数据科学社区(ppvke123)

原文发表时间:2014-07-25

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏java一日一条

哪些因素影响Java调用的性能?

这得从一个小故事说起。我在一个Java核心库的邮件列表中提交了一个修改 ——重写了一些本是 final 的方法。一石激起千层浪,这一改动引发了几番讨论。而其中一...

13710
来自专栏工科狗和生物喵

【我的漫漫跨考路】有生之年·调完了BUG--冒泡排序C++版本

正文之前 今天去牛客网试了试一些实战编程题,感觉贼有意思,但是也很难,挑了个成绩排序的算法题我就开始怼! 对我一个编程经验并不是很丰富的人来说,确实算是个挑战了...

38060
来自专栏颇忒脱的技术博客

Elasticsearch中将Doc根据A字段排序获得第一个Doc的B字段值的方法

最近遇到这样一个需求,要通过Elasticsearch将Doc根据A字段降序,然后获得B字段的值,最终根据B字段的值再去做Pipeline Aggregatio...

19020
来自专栏小樱的经验随笔

SG函数和SG定理【详解】

在介绍SG函数和SG定理之前我们先介绍介绍必胜点与必败点吧. 必胜点和必败点的概念: P点:必败点,换而言之,就是谁处于此位置,则在双方操作正确的情况下必败。...

39170
来自专栏即时通讯技术

字符编码那点事:快速理解ASCII、Unicode、GBK和UTF-8

原作者:阮一峰(ruanyifeng.com),现重新整理发布,感谢原作者的无私分享。

26320
来自专栏数据结构与算法

P2051 [AHOI2009]中国象棋

题目描述 这次小可可想解决的难题和中国象棋有关,在一个N行M列的棋盘上,让你放若干个炮(可以是0个),使得没有一个炮可以攻击到另一个炮,请问有多少种放置方法。大...

28850
来自专栏码洞

编程的智慧

编程是一种创造性的工作,是一门艺术。精通任何一门艺术,都需要很多的练习和领悟,所以这里提出的“智慧”,并不是号称一天瘦十斤的减肥药,它并不能代替你自己的勤奋。然...

6310
来自专栏北京马哥教育

国家认证的Python工程师有什么能力要求?

Python这门语言近来是越来越火,在国家层面越来越被重视。除了之前热议的加入高考和中小学教育之外,现在连普通大学生也无法逃脱Python的毒手了。

72400
来自专栏猿人谷

C++命名规则

如果想要有效的管理一个稍微复杂一点的体系,针对其中事物的一套统一、带层次结构、清晰明了的命名准则就是必不可少而且非常好用的工具。 活跃在生物学、化学、军队、监狱...

23760
来自专栏数据分析

[数据清洗]- Pandas 清洗“脏”数据(三)

预览数据 这次我们使用 Artworks.csv ,我们选取 100 行数据来完成本次内容。具体步骤: 导入 Pandas 读取 csv 数据到 DataFra...

47380

扫码关注云+社区

领取腾讯云代金券