《R语言实战》学习笔记第二章

本章内容:创建数据集

2.2 数据结构

向量

一维数组,可以用于储存数值型,字符型和逻辑型的数组,使用函数c()创建。注意同一向量中的数据必须是同一类型的。

在创建向量后,可以通过访问方括号中的位置来访问特点的元素。

例如:

> a<-c("a","b","c","d","e")
> a[3]
[1] "c"
> a[2:5]
[1] "b" "c" "d" "e"

矩阵

二维数组,每个元素都拥有相同的模式。可以使用matrix()函数创建

mymatrix <- matrix(vector, nrow=row_number, 
ncol=col_number,byrow=Logical_value,
dimnames=list(char_vector_rownames,char_vector_colnames))

默认情况下byrow=FALSE,按列填充

矩阵中下标的使用:

> x <- matrix(1:10,nrow=2,byrow = FALSE)
> x
     [,1] [,2] [,3] [,4] [,5]
[1,]    1    3    5    7    9
[2,]    2    4    6    8   10
> x[2,]
[1]  2  4  6  8 10
> x[,4]
[1] 7 8
> x[2,c(3,4)]
[1] 6 8

数组

数组(array)的形式与矩阵相似,但是维度≥2。数组通过函数array()创建。

myarray <- array(vector, dimensions, dimnames)

dimensions是一个数值型向量,给出了各维度最大的下标值

举例:

> 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

同样地,使用方括号可以访问位置

> z[2,2,4]
[1] 22

数据框

数据框与矩阵和数组的不同之处在于,不同的元素可以包含不同模式的数据。使用函数data.frame()创建

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

col表示列向量,可以为任何模式的数据

> patientID <- c(1,2,3,4)
> age <- c(25,34,28,52)
> diabetes <- c("Type1","Type2","Type1","Type1")
> status <- c("Poor","Improved","Excellent","Poor")
> patientdata <- data.frame(patientID,age,diabetes,status)
> patientdata
  patientID age diabetes    status
1         1  25    Type1      Poor
2         2  34    Type2  Improved
3         3  28    Type1 Excellent
4         4  52    Type1      Poor

同样地,方括号可以选取数据框中的元素

> patientdata[1:3]
  patientID age diabetes
1         1  25    Type1
2         2  34    Type2
3         3  28    Type1
4         4  52    Type1

$可以表示数据框中的某个变量

> table(patientdata$diabetes,patientdata$status)
       
        Excellent Improved Poor
  Type1         1        0    2
  Type2         0        1    0

此处引用变量使用$需要每次都键入数据框,有更精简的方法:

attach()和detach()

attach可以将数据框添加到R的搜索路径中,在添加以后,R遇到变量名会搜索已经添加的路径中的数据框。在使用attach()函数以后使用detach()将数据框从路径中移除。

> attach(patientdata)
The following objects are masked _by_ .GlobalEnv:

    age, diabetes, patientID, status

> patientage.m <- mean(age)
> patientage.m
[1] 34.75
> detach(patientdata)

但是如上所示,使用attach()函数的时候经常会遇到提示 The following objects are masked fromicon-default.png?t=LBL2https://bbs.pinggu.org/thread-5959579-1-1.html

原因:

attach()函数慎用,数据已数据框形式存储才是正确的姿势,如果mtcars释放到内从中,那么,如果内存中本身有个变量名和mtcars数据框中的变量名一样的话,后生的会覆盖先生的。

当相同名称的对象不止一个时,attach函数就有局限性了。with()函数则可以避免这一情况

> with(patientdata,summary(status))
   Length     Class      Mode 
        4 character character 

若有多条语句,在data_frame, 后加{},花括号中的内容则都是针对data_frame的

> with(mtcars,{
+ print(summary(mpg))
+ plot(mpg,disp)
+ plot(mpg,wt)
+ })
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
  10.40   15.43   19.20   20.09   22.80   33.90

《R语言实战》学习笔记第二章_第1张图片《R语言实战》学习笔记第二章_第2张图片

 

 如果需要创建在with之外的对象,则需要用特殊赋值符号<<-替代标准赋值符号<-

例:

> with(mtcars,{
+ mpg.note<-summary(mpg)
+ })
Error: unexpected input in:
"mpg.note<-summary(mpg)
})"

> with(mtcars,{
+ mpg.status <<- summary(mpg)
+ })
> mpg.status
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
  10.40   15.43   19.20   20.09   22.80   33.90 

<<-会将创建的对象保存在with()之外的全局环境中

实例标识符

在数据框中的patientID这个对象是用于辨识不同个体的,可以使用实例标识符(case identifier)对此类对象进行标识,变成在输出中实例名称所用的变量。用row.names选项进行标识。

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

因子

变量可归结为名义型,有序型,连续型,其中名义型和有序型在R中称为因子(factor)。函数factor()以整数向量的形式储存类别值。整数取值范围为[1,...,k],其中k为名义型变量中的唯一值的个数

例如:

> diabetes
[1] Type1 Type2 Type1 Type1
Levels: Type1 Type2

将Type1和Type2分为两个水平,并且在内部储存时将diabes向量储存为(1,2,1,1)。赋值顺序根据字母顺序确定。

如果要表示有序型变量,在factor()中使用选项ordered=TRUE

如果想覆盖按照字母顺序给定的水平,则在factor()中指定选项levels=c(),水平与变量出现顺序保持一致。

什么情况下应该将对象转化为因子?

在后续的实际使用中,会出现不知何时应该将名义型和有序型变量转化为因子的情况,现总结如下:

《R语言实战》学习笔记第二章_第3张图片

使用分类数据的意义是什么?

  • 实现研究对象的分组、分类计算

 

列表

列表是一些对象或者成分的有序集合。可使用函数list()创建列表。

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

在object前加上选项name=可以为对象命名

在list中可以使用双重方括号来访问特定部分,方括号中可以是该部分的数字或者名称。

mylist[[2]]
mylist[["age"]]

2.3 数据的输入

导入ASCⅡ文件

使用read.table()函数导入

mydataframe <- read.table(file,options)

file是ASCⅡ文本文件,options包含各种常用的选项,见书P33。

其中stringsAsFactors=Logical_value比较重要,其默认值为TRUE,即会将对象中的字符型向量转化为因子,在处理大型文本时设置为FALSE会提高处理速度。

导入Excel文件

使用xlsx包中的函数read.xlsx(file, n)导入。file为Excel的所在路径,n为sheet号。

导入SPSS文件

使用Hmisc包中的spss.get()函数来获取。

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

use.value.labels=TRUE是将mydata.scv中的值标签的变量转化为因子。

导入SAS文件

使用Hmisc包中的sas.get()函数来获取。

mydata <- sas.get(libraryName=datadir,member="clients",sasprog=sasexe)

libraryName是包含了SAS数据集的文件夹,member是数据集的名字,sasprog是sas程序所在的路径

2.4 数据集的标注

函数factor()可以为类别型变量创建值标签。

factor(object, levels=c(), labels=c())

其中levels中的是变量的实际值labels中的是目标值标签的字符向量

2.5 处理数据对象的实用函数

书中P41

最后,如果想删除所有当前工作环境的对象,使用:

rm(list=ls())

你可能感兴趣的:(r语言,开发语言)