优秀的编程知识分享平台

网站首页 > 技术文章 正文

用R语言做数据分析——创建数据集

nanyue 2024-08-06 18:08:01 技术文章 4 ℃

R拥有许多用于存储数据的对象类型,包括标量、向量、矩阵、数组、数据框和列表。它们在存储数据的类型、创建方式、结构复杂度,以及用于定位和访问其中个别元素的标记等方面均有所不同,下面从向量开始,逐一探究每一种数据结构。

向量

向量是用于存储数值型、字符型或逻辑型数据的一维数组。执行c()函数可用来创建向量:

#数值型向量

a <- c(1,2,5,3,6,-2,4)

#字符型向量

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

#逻辑型向量

c <- c(TRUE,TRUE,FALSE,FALSE)

单一向量中的数据必须拥有相同的类型或模式,同一向量中无法混杂不同模式的数据。通过方括号给定所处位置的数值,就能访问向量中的元素:

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

> a[3]

[1] 5

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

[1] 1 5 6

> a[2:6]

[1] 2 5 3 6 -2

标量

标量是只包含一个元素的向量,例如f <- 3,g <- "US"和h <- TRUE。它们通常用于保存常量。

矩阵

矩阵是一个二维数组,只是每个元素都拥有相同的模式,可通过matrix()函数创建矩阵,一般使用格式为:

vector包含了矩阵元素,nrow和ncol用于指定行和列的维数,dimnames包含了以字符型向量表示的行名和列名。选项byrow则表明矩阵应当按行填充(byrow=TRUE)还是按列填充(byrow=FALSE),默认是按列填充。

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

> y

[,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

> cell <- c(1,26,24,68)

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

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

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

> mymatrix

C1 C2

R1 1 24

R2 26 68

>#矩阵下标的使用

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

> 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[1,4]

[1] 7

> x[1,c(4,5)]

[1] 7 9

数组

数组与矩阵类似,但是维度可以大于2。数组可通过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

数据框

由于不同的列可以包含不同模式的数据,数据框的概念较矩阵来说更为一般,它与通常在SAS、SPSS中看到的数据集类似,数据框是在在R语言中最长处理的数据结构。通常情况下,由于数据有多种模式,无法将数据放入一个矩阵,这时使用数据框是最佳选择。可使用data.frame()函数创建:

其中的列向量col1,col2,col3可以为任何类型,每一列的名称可由函数names指定:

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:2]

patientID age

1 1 25

2 2 34

3 3 28

4 4 52

> patientData["diabetes","status"]

[1] <NA>

Levels: Excellent Improved poor Poor

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

diabetes status

1 type1 poor

2 type2 Improved

3 type1 Excellent

4 type1 Poor

> patientData$age

[1] 25 34 28 52

因子

变量可归结为名义型、有序型或连续型变量。名义型变量是没有顺序之分的类别变量;有序型变量表示一种顺序关系,而非数量关系;连续型变量可以呈现为某个范围内 的任意值,并同时表示了顺序和数量。

名义型变量和有序型变量在R中称为因子,因子在R中非常重要,因为它决定了数据的分析方式以及如何进行视觉呈现。函数factor()以一个整数向量的形式存储类别值,整数的取值范围[1,...,k](其中k是名义型变量中唯一值的个数),同时一个由字符串(原始值)组成的内部向量将映射到这些整数上,比如:

diabetes<-c("type1","type2","type1","type1")

语句diabetes <- factor(diabetes)将此向量存储为(1,2,1,1),并在内部将其关联为1=type1和2=type2,针对向量diabetes进行的任何分析将会将其当作明细型变量对待,并自动选择适合这一测量尺度的统计法那个法。

使用str(patientdata)可以显示对象的结构,使用summary(patientdata)可以显示对象的统计概要。

列表

列表是R语言中最复杂的一种数据类型。一般说来,列表就是一些对象的有序集合,列表允许整合若干对象到单个对象名下,可以使用list()函数创建列表:

下面创建一个列表,其中有四个成分,一个字符串、一个数值型向量、一个矩阵以及一个字符型向量。

g<-"My First List"

> h<-c(25,26,18,39)

> 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] 25 26 18 39

[[3]]

[,1] [,2]

[1,] 1 6

[2,] 2 7

[3,] 3 8

[4,] 4 9

[5,] 5 10

[[4]]

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

Tags:

最近发表
标签列表