第二章  创建数据集

本章概要

1探索R数据结构

2使用数据编辑器

3数据导入

4数据集标注

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

两个方面的内容。

方面一:R数据结构

方面二:进入数据或者导入数据到数据结构

理解数据集

一个数据集通常由一个表格组合而成,行表示观測,列表示变量。

病人的数据集如表1所看到的。

表1 病人数据集

数据集可以反映数据结构、数据类型和内容。

数据结构

R数据结构如图2所看到的。

图2:R数据结构

数据结构即数据的组织方式。R数据结构包含向量、矩阵、数组、数据框和列表等。

R向量

R向量是一维数组,元素类型能够为数值型、字符型和逻辑型等。

函数c()可用来形成向量,比如:

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

> b <- c("one", "two", "three", "four")

> c <- c(TRUE, TRUE, TRUE, TRUE)

向量元素数据类型必须同样,标量能够视为一个元素的向量。

向量元素获取方法,位置获取法或者逻辑获取法,比如:

> a[1]

[1] 1

> a[c(2,3)]

[1] 2 3

> a[2:4]

[1] 2 3 4

> a[a>2]

[1] 3 4

R矩阵

R向量是一个二维数组,矩阵中元素的数据类型必须同样。

创建矩阵的方法。即用矩阵函数。形式例如以下:

mymatrix <- matrix(vector, nrow=nrownum,ncol=ncolnum,byrow=logical_value,

dimnames=list(rownames_vector,colnames_vector))

创建矩阵。比如:

> x <- matrix(1:20, nrow=5, ncol=4)

> x

[,1] [,2] [,3] [,4]

[1,]    1    6   11   16

[2,]    2    7   12   17

[3,]    3    8   13   18

[4,]    4    9   14   19

[5,]    5   10   15   20

> cells <- c(1, 10, 100, 1000)

> rnames <- c("R1", "R2")

> cnames <- c("C1", "C2")

> mymatrix <- matrix(cells, nrow=2, ncol=2, byrow=TRUE, dimnames=list(rnames, cnames))

> mymatrix

C1   C2

R1   1   10

R2 100 1000

R数组

R数组与相似,但维数超过2维。

创建数组方法。即用数组函数,形式例如以下:

myarray <- array(vector,  dimensions, dimnames)

创建数组,比如:

> dim1 <- c("A1", "A2")

> dim2 <- c("B1", "B2", "B3")

> dim3 <- c("C1", "C2", "C3", "C4")

> z <- array(1:24, c(2, 3, 4), dimnames=list(dim1, dim2, dim3))

> z

, , C1

B1 B2 B3

A1  1  3  5

A2  2  4  6

, , C2

B1 B2 B3

A1  7  9 11

A2  8 10 12

, , C3

B1 B2 B3

A1 13 15 17

A2 14 16 18

, , C4

B1 B2 B3

A1 19 21 23

A2 20 22 24

R数据框

R数据框中不同的列能够包括不同类型的内容。

表1病人数据集就能够使用R数据框来存放数据。

创建数据框,即用数据框函数,形式例如以下:

mydata <- data.frame(col1, col2,  col3 ...)

创建数据框。比如:

> patientID <- c(1, 2, 3, 4)

> age <- c(24, 34, 28, 52)

> diabtetes <- c("Type1", "Type2", "Type1", "Type1")

> status <- c("Poor", "Improved", "Excellent", "Poor")

> patientdata <- data.frame(patientID, age, diabtetes, status)

> patientdata

patientID age diabtetes    status

1         1  24     Type1      Poor

2         2  34     Type2  Improved

3         3  28     Type1 Excellent

4         4  52     Type1      Poor

获取数据框中的元素,比如:

> patientdata[1:2]

patientID age

1         1  24

2         2  34

3         3  28

4         4  52

> patientdata[,1]

[1] 1 2 3 4

> patientdata[1,]

patientID age diabtetes status

1         1  24     Type1   Poor

> patientdata[c("age", "status")]

age    status

1  24      Poor

2  34  Improved

3  28 Excellent

4  52      Poor

> patientdata$age

[1] 24 34 28 52

> patientdata[,2]

[1] 24 34 28 52

R数据框生成交叉表,比如

> table(patientdata$diabtetes, patientdata$status)

Excellent Improved Poor

Type1         1        0    2

Type2         0        1    0

attach()函数能够把数据框增加到R的搜索路径。

detach()函数表示把数据框从R的搜索路径中移除。

R因子

分类或者有序分类变量在R中称为因子。

R 因子实比例如以下:

> patientID <- c(1, 2, 3, 4)

>  age <- c(24, 34, 28, 52)

> diabtetes <- c("Type1", "Type2", "Type1", "Type1")

> status <- c("Poor", "Improved", "Excellent", "Poor")

> diabtetes <- factor(diabtetes)

> status <- factor(status, order=TRUE)

> patientdata <- data.frame(patientID, age, diabtetes, status)

> str(patientdata)

'data.frame':   4 obs. of  4 variables:

$ patientID: num  1 2 3 4

$ age      : num  24 34 28 52

$ diabtetes: Factor w/ 2 levels "Type1","Type2": 1 2 1 1

$ status   : Ord.factor w/ 3 levels "Excellent"<"Improved"<..: 3 2 1 3

> summary(patientdata)

patientID         age       diabtetes       status

Min.   :1.00   Min.   :24.0   Type1:3   Excellent:1

1st Qu.:1.75   1st Qu.:27.0   Type2:1   Improved :1

Median :2.50   Median :31.0             Poor     :2

Mean   :2.50   Mean   :34.5

3rd Qu.:3.25   3rd Qu.:38.5

Max.   :4.00   Max.   :52.0

R列表

R列表能够包括向量、矩阵、数据框、列表等。

创建列表的方法,即用列表函数,形式例如以下:

mylist <- list(object1, object2, ...)

创建列表。比如:

> g <- "My First List"

> h <- c(24, 12, 18, 29)

> j <- matrix(1:10, nrow=5)

> k <- c("one", "two", "three")

> mylist <- list(title=g, ages=h, j, k)

> mylist

$title

[1] "My First List"

$ages

[1] 24 12 18 29

[[3]]

[,1] [,2]

[1,]    1    6

[2,]    2    7

[3,]    3    8

[4,]    4    9

[5,]    5   10

[[4]]

[1] "one"   "two"   "three"

获取列表中的元素

> mylist[[1]]

[1] "My First List"

> mylist[[2]]

[1] 24 12 18 29

> mylist[2]

$ages

[1] 24 12 18 29

> mylist[["ages"]]

[1] 24 12 18 29

数据输入

R导入不同数据源,如图3所看到的。

图3:R导入不同数据源

R数据导入能够參阅R官方文档:http://cran.r-project.org/doc/manuals/R-data.pdf

R数据导入方式例如以下

方式一:从键盘导入,先创建一个空的数据框或者矩阵。后用edit()函数。

比如:

> mydata <- data.frame(age=numeric(0), weight=numeric(0))

> mydata <- edit(mydata)

> mydata

age weight

1  10     10

2  12      8

> fix(mydata)  # 等价于mydata <- edit(mydata)

> mydata

age weight

1  10     10

2  12      8

3   8      7

方式二:从固定文本导入,使用函数read.table(),形式例如以下:

mydataframe <- read.table(file, header=logical_value, sep="delimiter", row.names="name")

方式三:从Excel导入,能够把Excel先转换为纯文本或者xxx.csv文件。使用方式二导入数据。或者在Windows操作系统,使用RODBC包中相关函数导入。比如:

> setwd("E:\\data")

> getwd()

[1] "E:/data"

> install.packages("RODBC")

> library(RODBC)

> channel <- odbcConnectExcel("patient.xls")

> mydataframe <- sqlFetch(channel,"Sheet1")

> mydataframe

weight height

1     60   1.75

2     72   1.80

3     57   1.65

4     90   1.90

5     95   1.74

6     72   1.91

> odbcClose(channel)

> mydataframe

weight height

1     60   1.75

2     72   1.80

3     57   1.65

4     90   1.90

5     95   1.74

6     72   1.91

若是Excel2007及以上版本号,使用xlsx包中函数导入数据,比如:

> install.packages("xlsx")

> library(xlsx)

加载须要的程辑包:rJava

加载须要的程辑包:xlsxjars

> mydataframe1 <- read.xlsx("patient.xlsx", 1)

> mydataframe1

weight height

1     60   1.75

2     72   1.80

3     57   1.65

4     90   1.90

5     95   1.74

6     72   1.91

方式四:从xml导入,能够用xml包种方法导入。能够參阅: www.omegahat.org/RSXML

方式五:从网页爬虫导入。能够先下载网页,再用readLines()方法,參阅:www.programmingr.com

方式六:从spss导入,能够用foreign包的read.spass()方法或者Hmisc包的spss.get()方法。

方式七:从sas导入,SAS9.1版本号下面,能够用用foreign包的read.ssd()方法或者Hmisc包的sas.get()方法;更高版本号,能够使用商业统计数据转换软件或者把SAS结果输出为csv格式。再用read.table()导入。

方式八:从stas导入,用foreign包的read.dta()方法。

方式九:从nteCDF导入,用ncdf或者ncdf4包中的方法。

方式十:从HDF5导入。用hdf5包中的方法。

方式十一:从DBMS导入。用包ODBC中方法。ODBC方法如图4所看到的。

图4: RODBC包的函数

一些与数据库打交道的包,比如:DBI、RJDBC、RMySQL、ROracle、RPostgreSQL和RSQLite等。

方式十二:从stattransfer导入

利用一个商业化软件stattransfer实现数据格式转换,參阅:www.stattransfer.com

标注数据

利用标准数据使得结果更易理解。通过变量标签或者值标签来标准数据。

工作于数据对象的实用函数

工作于数据对象的一些实用函数如图5所看到的:

图5:工作于数据对象的实用函数

总结

1​ 数据分析任务的挑战之中的一个就是数据准备。

2R组织数据的方式,向量、矩阵、数组、数据库、列表等

3R数据导入方式

Resource:

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

2《R in action》第一部分第二章创建数据集

《R实战》读书笔记三的更多相关文章

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

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

  2. R实战读书笔记四

    第三章 图形入门 本章概要 1 创建和保存图形 2 定义符号.线.颜色和坐标轴 3 文本标注 4 掌控图形维数 5 多幅图合在一起 本章所介绍内容概括例如以下. 一图胜千字,人们从视觉层更易获取和理解 ...

  3. iPhone与iPad开发实战读书笔记

    iPhone开发一些读书笔记 手机应用分类1.教育工具2.生活工具3.社交应用4.定位工具5.游戏6.报纸和杂志的阅读器7.移动办公应用8.财经工具9.手机购物应用10.风景区相关应用11.旅游相关的 ...

  4. <<Java RESTful Web Service实战>> 读书笔记

    <<Java RESTful Web Service实战>> 读书笔记 第一章   JAX-RS2.0入门 REST (Representational State ransf ...

  5. 机器学习实战 - 读书笔记(13) - 利用PCA来简化数据

    前言 最近在看Peter Harrington写的"机器学习实战",这是我的学习心得,这次是第13章 - 利用PCA来简化数据. 这里介绍,机器学习中的降维技术,可简化样品数据. ...

  6. 机器学习实战 - 读书笔记(12) - 使用FP-growth算法来高效发现频繁项集

    前言 最近在看Peter Harrington写的"机器学习实战",这是我的学习心得,这次是第12章 - 使用FP-growth算法来高效发现频繁项集. 基本概念 FP-growt ...

  7. 机器学习实战 - 读书笔记(11) - 使用Apriori算法进行关联分析

    前言 最近在看Peter Harrington写的"机器学习实战",这是我的学习心得,这次是第11章 - 使用Apriori算法进行关联分析. 基本概念 关联分析(associat ...

  8. 机器学习实战 - 读书笔记(07) - 利用AdaBoost元算法提高分类性能

    前言 最近在看Peter Harrington写的"机器学习实战",这是我的学习笔记,这次是第7章 - 利用AdaBoost元算法提高分类性能. 核心思想 在使用某个特定的算法是, ...

  9. 【转载】MDX Step by Step 读书笔记(三) - Understanding Tuples (理解元组)

    1. 在 Analysis Service 分析服务中,Cube (多维数据集) 是以一个多维数据空间来呈现的.在Cube 中,每一个纬度的属性层次结构都形成了一个轴.沿着这个轴,在属性层次结构上的每 ...

  10. Spring实战读书笔记

    Spring实战读书笔记 Spring-core Spring之旅 - DI 和 AOP 概念 spring 的Bean容器 spring 的 核心模块 Spring的核心策略 POJO 最小侵入式编 ...

随机推荐

  1. ecshop2.7.3怎么自动清除缓存

    1.在ecs_shop_config表中插入一条数据 进入ECSHOP后台-数据库管理-SQL查询 复制下面SQL,粘贴到里面执行.注意这时是默认表前缀ecs_,如果你的修改过要和你的统一了. INS ...

  2. WCF异常传播

    传送至客户端的异常肯定是CommunitionException类型,包括一般的通信过程中出错而引发的CommunicationException类型,System.IdentityModel.Sel ...

  3. oracle一个用户密码管理多达同意三次企图登录

    假设一个用户登录连续失败三次.两日,锁定用户,两天后再次登录的用户的能力. 创建profile文件: 更新账户: 三次登录失败后用户就会被锁定: 用户锁住之后要怎么给他解锁: 解锁之后就能够正常登录了 ...

  4. Naive Bayes Classification

    Maching Learning QQ群:2 请说明来自csdn 微信:soledede

  5. 丢弃重口味的xml配置--spring4用groovy配置bean(转)

    spring4之前,bean的配置可以主要分为两种方式,一种是使用基于xml,个人非常讨厌这种方式,因为明明一件很简单的事,放在xml中就会多了不少繁杂的信息.另一种方式,是从spring3.0开始, ...

  6. Sliverlight之 故事板

    见Project19 (1) 将一张图片每隔一秒旋转72度,看看效果是什么样(使用定时器) 说明:前端 <Image.RenderTransform> <RotateTransfor ...

  7. Java中动态代理技术生成的类与原始类的区别

    用动态代理的时候,对它新生成的类长什么样子感到好奇.有幸通过一些资料消除了心里的疑惑. 平时工作使用的Spring框架里面有一个AOP(面向切面)的机制,只知道它是把类重新生成了一遍,在切面上加上了后 ...

  8. Memcahce(MC)系列(两)Linux下一个Memcache安装

    Linux下一个memcache安装 memcache是高性能.分布式的内存对象缓存系统,用于在动态应用中降低数据库负载.提升訪问速度.眼下用memcache解决互联网上的大用户读取是很流行的一种使用 ...

  9. Convert View To Bitmap

    public static Bitmap convertViewToBitmap(View view) { view.destroyDrawingCache(); view.measure(View. ...

  10. 安装Microsoft .NET Framework 3.5 Service Pack 1回报1603错

    server升级了一下系统补丁(360安装),所有发现.net无法打开网站,提示" 因为无法创建应用程序域,因此未能运行请求.错误: 0x80070002 系统找不到指定的文件. " ...