R语言实践学习(系列1)

初涉R语言这本书,看了前两章,有了如下总结。

1.首先是R语言数据分析的流程,如下图。

总结:R语言运行进行数据分析的流程:数据首先导入,然后对数据进行整理,拟合一个模型,然后进行评估及交叉验证,开始正式预测效果,最终生成报告。

2R程序中,数据的类型包括向量、矩阵、数据框、列表。数据框与数据集类似,列表就是各种对象的集合。使用<-进行赋值。R中多数功能是由程序内置函数和用户自编函数提供的,一次交互式会话期间的所有数据对象都被保存在内存中。R语言也可以如C语言等一样可以写注释,需要在语句后加上#。一些基本函数是默认直接可用的,其他高级函数则包含在按需加载的程序包中。

3R语言也有大量帮助功能,内置帮助系统提供了安装包中所有函数的细节、参考文献与使用示例。Help.start()会打开浏览器窗口。Rsitesearch()可在在线帮助手册和R-Help邮件列表讨论存档中搜索指定主题。Vignette()返回的文档一般是PDF格式的文章。

4.工作空间就是R语言的工作环境,储存着用户定义的对象。当前的工作目录是R用来读取文件和保存结果的默认目录。

函数getwd()是查看当前目录,setwd()是设置当前目录。如果要调用不在当前目录的文件,需要标明目录。

setwd("D:/数据分析/project")

options()

options(digits=3)#显示小后三位有效数字的格式

x<- runif(20) #包含20均匀分布随面变量的向量

summary(X) #生成数据的摘要统计量

hist(x) #计算数据的直方差

savehistory()#将历史文件保存到文件.rhistory中

save.image()#将历史数据保存到文件R.data中

q()#结束,退出程序


5编好了代码的脚本最终需要输入与输出,source()函数会在当前会话中执行脚本。Sink()将输出重定向到指定的文件中,也可以用如下函数重定向图形输出。最后dev.off()将输出返回到终端。


整个流程是这样的:


6. R语言中用户贡献了许多模块包,其他用户可以自行下载使用。使用函数install.packages()调用,使用library()载入包,libPaths()显示包的位置。Search()可以知道哪些包已加载并使用。

讲完了第一章R语言的总体概念,就需要从最初的数据导入开始,最早涉及就是数据结构的分类,然后依照不同渠道将数据导入。所以有了第二章。

1.数据结构包括标量、向量、矩阵、数组、数据框和列表。

数据框是R中用于存储数据的一种结构,可以存储不同类型包括数值型、字符型的变量。因子是名义型变量或有序型变量。它在R中被特殊存储和处理。


1.1向量:是用于存储数值型、字符型或逻辑型数据的一维数组。C()创建向量,方括号访问向量里面的值。

> a<-c(1,5,6,7,8,9)

> a[4]

[1] 7

> a<-c(1,5,6,7,8,9)

> a[4]

[1] 7

> a[c(1,3,5)]

[1] 1 6 8

> a<-c(1,5,6,7,8,9)

> a[4]

[1] 7

> a[c(1,3,5)]

[1] 1 6 8

> a[c(1:3)]

[1] 1 5 6

1.2 .矩阵

矩阵是个二维数组。公式:

Myymatrix<-matix(vector,nrow=number_of_rows,ncol=number_of_columns,byrow=logical_value,dimnames=list(char_vector_rowname,char_vector,colnames))vector是指矩阵元素,nrow是指矩阵行数,ncol是指矩阵列数,byrow是分配数据按行或列排列,默认是列,dimnames是指定行和列的名称。

创建矩阵:

> y<-matrix(1:25,nrow=5,ncol=5) #创建一个5X5的矩阵

> y

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

[1,]16111621

[2,]27121722

[3,]38131823

[4,]49141924

[5,]510152025

> cells<-c(2,6,89,56) #创建一个2X2的矩阵

>rname<-c("a1","a2")

>cname<-c("b1","b2")

> mymatrix1<-matrix(cells,nrow=2,ncol=2,byrow=FALSE,dimnames=list(rname,cname))

#数值按列填充,默认是列填充

> mymatrix1

b1 b2

a12 89

a26 56

>

mymatrix2<-matrix(cells,nrow=2,ncol=2,byrow=TRUE,dimnames=list(rname,cname))

#数值按行填充

> mymatrix2

b1 b2

a126

a2 89 56

矩阵下标的使用

> x<-matrix(1:20,nrow=2)

> x

[,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]

[1,]135791113151719

[2,]2468101214161820

> x[2,]

[1]2468 1012 14 16 18 20

> x[,5]

[1]9 10

> x[2,8]

[1] 16

> x[1,c(6,7)]

[1] 11 13

1.3数组

数组格式:myarray<-array(vector,dimensions,dimnames)

Array代表是一个数组,dimension是维度标签列表,是可选项,系统可自动列出名称

>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

a1135

a2246

, , c2

b1 b2 b3

a179 11

a28 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

1.4数据框

此数据类型为多种模式,可以是数字型,也可以是字符串型,还有其它,但同一组数据类型需要一致。数据框可有函数data.frame构建。

格式data<-data.frame(col1,col2,col3)

> patientID<-c(1,2,3,4) #数值型

> age<-c(22,45,67,89)#数值型

>

diabetes<-c("Type1","Type2","Type1","Type2")

#字符串型

> status

#字符串型

>

patientdata<-data.frame(patientID,age,diabetes,status) #组建数据框

> patientdata

patientID age diabetesstatus

1122Type1Poor

2245Type2Improved

3367Type1 Excellent

4489Type2Poor

选取数据框中的数据

> patientdata[1,2]

[1] 22

> patientdata[1:2]

patientID age

1122

2245

3367

4489

> patientdata[,2]

[1] 22 45 67 89

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

diabetesstatus

1Type1Poor

2Type2Improved

3Type1 Excellent

4Type2Poor

另外此函数可生成两个变量的联表table(patientdata$diabetes,patientdata$status)

table(patientdata$diabetes,patientdata$status),这里理解类似于excel里的pivot.

Excellent Improved Poor

Type1101

Type2011

Ps:Attach(),detach(),with()可以简化代码,不用重复键入数据框。但Attach(),detach()也有局限,如果新定义了一个同名称的变量,虽是同名,但变量数据不一时,则就不能调出新定义的数据框,它仅对原始定义数据框有效。

> attach(mtcars) #此函数可以数据框添加到R的搜索路径中,当遇到一个变量后,将检查搜索径中的数据框,以定位到这个变量。

> summary(mpg)

Min. 1st Qu.MedianMean 3rd Qu.Max.

10.4015.4219.2020.0922.8033.90

> plot(mpg,disp)


1.5因子

类别变量和有序类别变量在R中称为因子。函数factor()以一个整数向量的形式存储类别值,整数的取值范围是[1,K].

譬如在糖尿病事例中,将status各种情况设置向量编码,type设置为向量编码。相当于原本以字符串形式出现的数据将其统一赋值设置为整型数字向量。如果表示有序型变量,需要指定参数ordered=true.

> patientID<-c(1,2,3,4) #以向量形式输入数据

> age<-c(22,45,67,89)

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

>status<-c("improved","poor","excellent","poor")

> diabetes<-factor(diabetes) #将病例类型定义成普通因子

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

#将病人情况定义成有序型因子

>

patientdata<-data.frame(patientID,age,diabetes,status) #将因子型变量用数据框表现出来

> str(patientdata) #显示统计概要

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

$patientID: num1 2 3 4

$age: num22 45 67 89

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

$status: Ord.factor w/ 3 levels"excellent"<"improved"<..: 2 3 1 3

> summary(patientdata)

patientIDagediabetesstatus

Min.:1.00Min.:22.00Type1:2excellent:1

1stQu.:1.751st Qu.:39.25Type2:2improved :1

Median :2.50Median :56.00poor:2

Mean:2.50Mean:55.75

3rdQu.:3.253rd Qu.:72.50

Max.:4.00Max.:89.00

7列表

列表就是一些对象的有序集合。列表里有若干不同数据类型的数据,列表是将它们整合到单个对象名下。用函数list创建列表。结构是mylist<-(object1,object2)

> a<-c("采购订单明细") #字符串形式

> b<-c("订单A","订单B","订单C","订单D")

> page<-c(1,10,20,50)#数字形式

> e<-c(10,34,56,78)

> cname<-c("订单A","订单B")

> rname<-c("单价","总价")

>

d<-matrix(e,nrow=2,ncol=2,dimnames=list(rname,cname)) #矩阵数据结构

>

mylist<-list(title=a,name=b,pages=page,d) #列表结构

> mylist

$title

[1] "采购订单明细"

$name

[1] "订单A" "订单B" "订单C" "订单D"

$pages

[1]1 10 20 50

[[4]]

订单A订单B

单价1056

总价3478

> mylist["name"] #取出第二个对象的值

$name

[1] "订单A" "订单B" "订单C" "订单D"

> mylist[[2]]#格式与上一个不一样,但取值内容一样

[1] "订单A" "订单B" "订单C" "订单D"

了解了数据结构,就需要知道数据的来源,意即从何而为呢?开始了数据输入。

2.数据的输入,以下便是诸多的数据来源。


2.1使用键盘输入数据:先建立一个空的数据表格,然后edit函数可帮助后面在表里录入数据。

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

> mydata<-edit(mydata)


此表格关闭后,再次执行mydata<-edit(mydata),发现之前内容已保存,且可继续开始新的编辑。

2.2从带分隔符的文本文件导入数据

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

grade<-read.table("studentgrades.csv",header=TRUE,sep=",",row.names="studentID")

2.3导入excel数据

导入数据之前,需要安装RODBC和xlsx包。

Install.packages(“RODBC”)

Library(RODBC)

Channel<-odbcConnectExcel(“myfile.xls”)

Mydataframe<-sqlfetch(channel,”mysheet”)

odbcClose(channel)

以是是针对后缀为.xls的表格,如果xlsx表面要再安装xlsx包。

Install.packages(“xlsx”)

Library(xlsx)

Workbook<-“c:/myworkbook.xlsx” #赋予导入表格的路径

Mydtaframe<-read.xlsx(workbook,1) #按照路径导入第一个工作表,并将其按数据框存储

2.4导入XML数据

2.5从网页抓取数据

2.6导入SPSS数据

install.packages("Hmisc")

library(Hmisc)

mydataframe<-spss.get("mydata.sav",use.value.labels=TRUE)

2.7导入SAS数据

2.8导入Stata数据

Library(foreign)

Mydataframe<-read.dta(ydata.dta)

mydata.dta是Stata数据集,mydataframe是返回的R数据框。

2.9导入netCDF数据

library(ncdf)

nc<-nc_open("mynetCDFfile")

myarray<-get.var.ncdf(nc,myvar)

2.10导入HDF5数据

2.11访问数据库管理系统,

2.11.1R安装ODBC包访问ODBC驱动的数据库。

这样就必须首先针对电脑系统和数据库类型安装和配置合适的ODBC驱动,然后安装RODBC包。

install.packages("RODBC")

library(RODBC)

myconn<-odbcConnect("mydsn",uid="Rob",pwd=aardvark)

crimedat<-sqlFetch(myconn,Crime)

#将数据库中的表Crime导入数据框crimedat

pundat<-sqlQuery(myconn,"select*from Punishment")#将数据库中的表Punishment导入数据框pundat

close(myconn)

2.11.2 DBI相关包这个包为访问数据库提供了一个通用且一致的客户端接口。构建于这个框架上的RJDBC包提供了通过JDBC驱动访问数据库的方案,所以必须安装JDBC驱动。其余基于DBI包还有RMySQL,ROracle,RPostgreSQL,RSQLite.

2.12通过Stat/Transfer导入数据

关于导入数据的途径,有详有略,本人认为需要在大量实践中去体会其中的奥秘。

综上所述,这两章让初学者对R语言有了整体的概念,首先它的流程是怎样,然后细化到数据结构的种类及如何按各自类型被赋值给一个对象,后面谈到了导入数据的途径,学好了这些,对今后开始真正的数据分析会有很大的帮助。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,362评论 5 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,330评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,247评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,560评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,580评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,569评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,929评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,587评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,840评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,596评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,678评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,366评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,945评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,929评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,165评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,271评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,403评论 2 342

推荐阅读更多精彩内容