数据集的概念

1.1何为数据集

数据集通常是由数据构成的一个矩形数组,行表示观测,列表示变量。

iris数据集 r语言 r语言数据集是什么_数组

不同的行业对于数据集的行和列叫法不同。统计学家称它们为观测(observation)和变量(variable),数据库分析师则称其为记录(record)和字段(field),数据挖掘和机器学习学科的研究者则把它们叫作示例(example)和属性(attribute)。我们在本篇使用术语观测和变量。

你可以清楚地看到此数据集的结构(本例中是一个矩形数组)以及其中包含的内容和数据类型。在表2-1所示的数据集中,PatientID是行/实例标识符,AdmDate是日期型变量,Age是连续型变量,Diabetes是名义型变量,Status是有序型变量。

1.2 数据结构

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

iris数据集 r语言 r语言数据集是什么_学习_02

 

1.2.1向量

向量是用于存储数值型、字符型或逻辑型数据的一维数组。执行组合功能的函数c()可用来创建向量。各类向量如下例所示:

a<-c(1,2,3,4,5,6)
b<-c('one','two','three')
c<-c(TRUE,TRUE,FALSE,FALSE)
a
b
c

 显示结果:

> a
[1] 1 2 3 4 5 6
> b
[1] "one"   "two"   "three"
> c
[1]  TRUE  TRUE FALSE FALSE

这里,a是数值型向量,b是字符型向量,而c是逻辑型向量。注意,单个向量中的数据必须拥有相同的类型或模式(数值型、字符型或逻辑型)。同一向量中无法混杂不同模式的数据。

通过在方括号中给定元素所处位置的数值,我们可以访问向量中的元素。例如,a[c(2, 4)]用于访问向量a中的第二个和第四个元素。更多示例如下:

a<-c('k','j','h','a','c','m')
a[3]
a[c(1,3,5)]
a[2:6]

显示结果:

> a[3]
[1] "h"
> 
> a[c(1,3,5)]
[1] "k" "h" "c"
> a[2:6]
[1] "j" "h" "a" "c" "m"

1.2.2 矩阵

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

y<-matrix(1:20,nrow=5,ncol=4,byrow=FALSE)
y
rnames<-c('R1','R2','R3','R4','R5')
cnames<-c('c1','c2','c3','c4')
y<-matrix(1:20,nrow=5,ncol=4,byrow=FALSE,dimnames=list(rnames,cnames))
y

显示结果:

> y<-matrix(1:20,nrow=5,ncol=4,byrow=FALSE)
> 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
> rnames<-c('R1','R2','R3','R4','R5')
> cnames<-c('c1','c2','c3','c4')
> y<-matrix(1:20,nrow=5,ncol=4,byrow=FALSE,dimnames=list(rnames,cnames))
> y
   c1 c2 c3 c4
R1  1  6 11 16
R2  2  7 12 17
R3  3  8 13 18
R4  4  9 14 19
R5  5 10 15 20

注:byrow=TRUE,代表通过行来填充;dimnames=list(行名,列名)与byrow是否按行按列无关。

1.2.3 数组

数组(array)与矩阵类似,但是维度可以大于2。数组可通过array函数创建,形式如下:

myarray <- array(vector, dimensions, dimnames)
其中vector包含了数组中的数据,dimensions是一个数值型向量,给出了各个维度下标的最大值,而dimnames是可选的、各维度名称标签的列表。

dim1<-c('A1','A2')
dim2<-c('B1','B2','B3')
dim3<-c('C1','C2','C3','C4')
myarray<-array(1:10,c(2,3,4),dimnames=list(dim1,dim2,dim3))
myarray

显示结果:

> myarray
, , C1

   B1 B2 B3
A1  1  3  5
A2  2  4  6

, , C2

   B1 B2 B3
A1  7  9  1
A2  8 10  2

, , C3

   B1 B2 B3
A1  3  5  7
A2  4  6  8

, , C4

   B1 B2 B3
A1  9  1  3
A2 10  2  4

数组是矩阵的一个自然推广。它们在编写新的统计方法时可能很有用。像矩阵一样,数组中的数据也只能拥有一种模式。从数组中选取元素的方式与矩阵相同。上例中,元素z[1,2,3]为15。

1.2.4 数据框

由于不同的列可以包含不同模式(数值型、字符型等)的数据,数据框的概念较矩阵来说更为一般。

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

显示结果:

> patientdata
  patientID age diabetes    status
1         1  25    Type1      Poor
2         2  34    Type2  Improved
3         3  28    Type3 Excellent
4         4  52    Type4      Poor

每一列数据的模式必须唯一,不过你却可以将多个模式的不同列放到一起组成数据框。

1.2.5 因子

变量可归结为名义型、有序型或连续型变量.

类别(名义型)变量和有序类别(有序型)变量在R中称为因子(factor)。因子在R中非常重要,因为它决定了数据的分析方式以及如何进行视觉呈现。

函数factor()以一个整数向量的形式存储类别值,整数的取值范围是[1...k](其中k是名义型变量中唯一值的个数),同时一个由字符串(原始值)组成的内部向量将映射到这些整数上。
 

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

显示结果:

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

要表示有序型变量,需要为函数factor()指定参数ordered=TRUE。

status<-c("Poor", "Improved", "Excellent", "Poor")
status<-factor(status,ordered = TRUE)
status

显示结果:

> status
[1] Poor      Improved  Excellent Poor     
Levels: Excellent < Improved < Poor

可以通过指定levels选项来覆盖默认排序。

status<-c("Poor", "Improved", "Excellent", "Poor")
status<-factor(status,ordered = TRUE,levels=c('Poor','Improved','Excellent'))
status

显示结果:

> status
[1] Poor      Improved  Excellent Poor     
Levels: Poor < Improved < Excellent

数值型变量可以用levels和labels参数来编码成因子。

sex<-c(1,2,1,2,2,1)
sex<-factor(sex,levels=c(1,2),labels=c('man','woman'))
sex

显示结果:

> sex
[1] man   woman man   woman woman man  
Levels: man woman

1.3 数据的输入

现在你已经掌握了各种数据结构,可以放一些数据进去了。作为一名数据分析人员,你通常会面对来自多种数据源和数据格式的数据,你的任务是将这些数据导入你的工具,分析数据,并汇报分析结果。R提供了适用范围广泛的数据导入工具。

iris数据集 r语言 r语言数据集是什么_学习_03

read.table()的选项

 

iris数据集 r语言 r语言数据集是什么_数据_04

 

1.4 数据集的标注

为了使结果更易解读,数据分析人员通常会对数据集进行标注。这种标注包括为变量名添加描述性的标签,以及为类别型变量中的编码添加值标签。例如,对于变量age,你可能想附加一个描述更详细的标签“Age at hospitalization (in years)”(入院年龄)。对于编码为1或2的性别变量gender,你可能想将其关联到标签“male”和“female”上。

函数factor()可为类别型变量创建值标签。继续上例,假设你有一个名为gender的变量,其中1表示男性,2表示女性。

gender<-c(1,2,1,2)
patientdata$gender<-gender
patientdata$gender<-factor(patientdata$gender,levels=c(1,2),labels=c("male", "female"))
patientdata

显示结果:

patientdata
  patientID age diabetes    status
1         1  25    Type1      Poor
2         2  34    Type2  Improved
3         3  28    Type3 Excellent
4         4  52    Type4      Poor
> gender<-c(1,2,1,2)
> patientdata$gender<-gender
> patientdata
  patientID age diabetes    status gender
1         1  25    Type1      Poor      1
2         2  34    Type2  Improved      2
3         3  28    Type3 Excellent      1
4         4  52    Type4      Poor      2
> patientdata$gender<-factor(patientdata$gender,levels=c(1,2),labels=c("male", "female"))
> patientdata
  patientID age diabetes    status gender
1         1  25    Type1      Poor   male
2         2  34    Type2  Improved female
3         3  28    Type3 Excellent   male
4         4  52    Type4      Poor female