加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

R语言之数据集的创建

(2016-09-07 17:28:01)
分类: R语言

创建数据集是统计分析的开始,在R中通常包括两个步骤;

1.       选择一种数据结构(标量、向量、数组、列表、数据框)来储存数据

2.       将数据输入或导入数据结构中

数据集通常是一个有数据组成的矩形数组,行表示观测(observation,列表示变量(variable)。数据类型通常包括字符型、数值型、逻辑性(TRUE/FALSE)、复数型(虚数)和原生型(字符)。

A.        向量  

定义: a<-c(1,23,45,2,0,9)

调取: a[3] ; a[c(2,5)] ; a[2:6]=>a[c(2,3,4,5,6)]

B.        矩阵(二维数组),每个元素有相同的模式,matrix

定义:

> x<-c(1:20)

> rnames<-c("A1","A2","A3","A4")

> cnames<-c("B1","B2","B3","B4","B5")

> x<-matrix(x,nrow=4,byrow=T,dimnames=list(rnames,cnames))

> x

输出:

   B1  B2  B3  B4  B5

A1  1   2   3   4   5

A2  6   7   8   9   10

A3  11  12  13  14  15

A4  16  17  18  19  20

调取:x[2,]x[1,4]x[1,c(4,5)]=>4,5

C.        数组(array

定义:

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

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

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

> myarray<-array(1:18,c(3,2,3),dimnames=list(dim1,dim2,dim3))

> myarray

输出:

, , C1

 

   B1  B2

A1  1   4

A2  2   5

A3  3   6

 

, , C2

 

   B1  B2

A1  7  10

A2  8  11

A3  9  12

 

, , C3

 

   B1  B2

A1 13  16

A2 14  17

A3 15  18

调取:myarray[1,2,3]

D.        数据框,不同的列包含不同的模式【常】

定义:

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

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

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

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

> mydata<-data.frame(patientID,age,diabetes,status)

> mydata

输出:

       patientID   age   diabetes    status

1         1  25    Type1      poor

2         2  34    Type2    improved

3         3  28    Type1    excellent

4         4  52    Type1      poor

        调取:mydata[1:2]mydata[c(“age”,”diabetes”)]mydata[c(1,3)]mydata$age

$:用于选取一个给定数据框中的某个特定变量。

    e.g.

> table(mydata$status, mydata$diabetes)

         输出:

                       Type1  Type2

            excellent     1      0

            improved     0      1

  poor         2      0

        =>简化:attach( )detach( )with( ) 函数

               attach( ): 将数据框添加到R的搜索路径中。

         e.g.

                > attach(mydata)

The following objects are masked _by_ .GlobalEnv: age, diabetes, patientID, status

>summary(patientID)

   Min. 1st Qu.  Median    Mean 3rd Qu.    Max.

   1.00    1.75    2.50    2.50    3.25    4.00

> plot(patientID,age)   

>detach(mydata)

detach( )将数据框从搜索路径中移除,可省略

注意:命名时原始对象享有优先权,避免同名对象的使用。

           with( ):

           > with(mydata,{

 summary(patientID,age)

 plot(patientID,age)

 })

注意:with语句的赋值仅在此函数的括号内生效;若创建此函数外存在的对象,使用特殊符号《-代替<-

实例标识符:

e.g.         >  patientID<-c(2,3,4,5)

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

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

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

> mydata<-data.frame(patientID,age,diabetes,status,row.names=patientID)

> mydata

输出:

  patientID  age   diabetes    status

2         2       25    Type1      poor

3         3       34    Type2    improved

4         4       28    Type1    excellent

5         5       52    Type1      poor

变量可分为:名义型(无序型)、有序型[如上实例中的status]、连续型[某个范围内的任意值,同时表示了顺序和数量,如Age]

函数factor( )整数向量的形式存储类别值;表示有序型变量,需指定参数ordered=TRUE

e.g.      

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

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

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

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

> diabetes<-factor(diabetes)

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

> mydata<-data.frame(patientID,age,diabetes,status)

> str(mydata)

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

 $ patientID: num  2 3 4 5

 $ age      : num  25 34 28 52

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

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

> summary(mydata)

   patientID         age         diabetes       status

 Min.   :2.00    Min.   :25.00    Type1:3      excellent:1 

 1st Qu.:2.75     1st Qu.:27.25     Type2:1      improved :1 

 Median :3.50    Median :31.00                 poor :2 

 Mean   :3.50   Mean   :34.75                         

 3rd Qu.:4.25     3rd Qu.:38.50                         

             Max.   :5.00    Max.   :52.00                        

E:列表(list),可包括若干向量、矩阵、数据框等其他组合

定义:> g<-"my data"

> h<-c(23,4,24,51)

>rnames<-c(“A1”,”A2”,”A3”,”A4”,”A5”,”A6”)

>cnames<-c(“B1”,”B2”,”B3”,”B4”)

> j<-matrix(1:24,nrow=6,byrow=T,dimnames=list(rnames,cnames))

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

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

> mylist

$title

[1] "my data"

 

$ages

[1] 23  4  24  51

 

[[3]]

      [A1]  [A2]  [A3]  [A4]

[B1]    1    2    3    4

[B2]    5    6    7    8

[B3]    9   10   11    12

[B4]   13   14   15    16

[B5]   17   18   19    20

[B6]   21   22   23    24

 

[[4]]

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

调用:> mylist[[2]]

[1] 23  4  24  51

数据的输入可从键盘、文本文件、Microsoft Excel Access、统计软件、特殊格式的文件等导入数据。

                         i.              键盘键入:(1)选择数据框模式

                 2)调用文本编辑器,输入数据

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

gender=character(0),weight=numeric(0))

>fix(mydata)

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

e.g.  >grades<-read.table(“student.csv”,header=T,sep=”,”,

row.names=”STUDENTID”)

                      iii.              导入Excel数据,最好方式是将Excel文件导出为一个逗号分隔文件,按ii方法导入;或使用RODBC包访问。

e.g.  >install.packages(“RODBC”)

     >library(RODBC)

     >channel<-odbcConnectExcel(“myfile.xls”)

     >mydata<-sqlFetch(channel,”mysheet”)

     >odbcClose(channel)

调用.xlsx格式文件时的格式:

>library(xlsx)

>workbook<-“c:/myworkbook.xlsx

>mydata<-read.xlsx(workbook,1)”

                      iv.              导入XML数据

                        v.              从网页抓取    readLines( )

                      vi.              导入SPSS数据,可使用默认安装的foreign包,或安装使用Hmisc包中的spss.get( )函数

                     vii.              导入SAS数据,可使用默认安装的foreign包中的read.ssd( ),或安装使用Hmisc包中的sas.get( )函数

                   viii.              导入Stata数据

   e.g.

     

数据集的标注:变量标签;值标签(patientdata$gender<-factor(patientdata$gender,

levels=c(1,2),labels=c(“males”,”femals”))

PS: head(object)=>列出数据框前六行

    tail(object)=>列出数据框后六行

更新R版本:
           
            

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有