数据集
2.1数据集概念
概念:通常是由数据构成的矩形数据
不同行业对数据集的行和列叫法不同
行业人
行
列
统计学家
观测(observation)
变量(variable)
数据库分析师
记录(record)
字段(field)
数据挖掘和机器学习研究中
示例(example)
属性(attribute)
可处理的数据类型(模式):数值型、字符型、逻辑型、复数型、原生型(字节)
存储数据的结构:标量、向量、数据、数据框和列表
实例的标识符:rownames(行名);实例的类别型:因子(factors)
2.2数据结构
这节讲了几个数据结构,向量、矩阵、数组、数据框,前三种分别是一维、二维、大于二维的,它们共同点是一个数据结构中,仅能用一种数据的模式,而数据框则可以多种模式。
一些定义
对象:可复制给变量的任何事物,包括常量、数据结构、函数、图形
模式:描述对象如何存储和某各类
数据框:存储数据的一种结构(列表示变量,行表示观测),一个数据框可存储不同类型的变量(如数值型、字符型)
2.2.1 向量(一维数据,数值型、字符型、逻辑型)
a
b
c
注意:1.字符型的向量,元素要加“ ”或者' ',数值型和逻辑型不需要。
2.同一向量,只能用一种模式的数据;
3.标量是只含一个元素的向量
#标量是 只含一个元素的向量
f
g
h
方括号的作用:元素的位置数值,具体如何访问向量中的元素,看下面代码
> a
> a[3] #向量a的第三个元素
[1] "h"
> a[c(1,3,5)] #向量a的第1个、第3个、第5个元素
[1] "k" "h" "c"
> a[2:6] #生成一个数值序列,向量a的从第2个到第6个的元素。等价于a(
[1] "j" "h" "a" "c" "m"
#两种方式生成的向量a一样
> a
> a
[1] 2 3 4 5 6
> a
> a
[1] 2 3 4 5 6
2.2.2 矩阵(二维数值,字符型、数值型、逻辑型)
注意:矩阵中仅能包含一种数据类型
函数matrix()
作用:创建矩阵
格式:myymatrix
其中,vector--矩阵的元素;nrow、ncol--分别制定行和列的维数;dimnames--可选的、以字符型向量表示的行名和列名;byrow--矩阵行行填充(byrow = TRUE)或者按列填充(byrow =FALSE),默认是按列。
matrix用法实例
eg1. 创建一个元素为1到20,大小5*4的矩阵,默认按列排列。
> y
> 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
eg2.
> cells
> rnames
> cnames
#按列排列(也是默认方式)
> mymatrix
> mymatrix
C1 C2
R1 1 24
R2 26 68
#按行排列
> mymatrix
> mymatrix
C1 C2
R1 1 26
R2 24 68
选择矩阵中的元素:
X[i,]:矩阵中的第i行; X[,j]:矩阵中的第j列; X[i,j]:第i行即j列元素
选择多行或多列,下标i和j可为数值型向量
例子:
> x
> 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[,2]
[1] 3 4
> x[1,4] #第1行的第4各个元素
[1] 7
> x[1,c(4,5)] #第1行的,第4个元素和第5个元素
[1] 7 9
2.2.3 数组(维度可以大于2)
注意:数组中的数据只能拥有一种模式
创建方式:array( )
myaaray
其中,vector -- 数组的中数据;dimensions -- 数值型向量,给出各维度的最大值;dimnames -- 可选的、各维度名称标签的列表.
eg.创建三维(2*3*4)数值型数组
> dim1
> dim2
> dim2
> dim3
> z
> 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
> 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[1,2,3]为15.
2.2.4 数据框(可包含不同模式(数值型、字符型等)的数据)
注意:可将多种模式的数据放入一个矩阵,但每列的数据模式必须唯一,不同列模式可以不同
创建函数 data.frame( )
mydata
其中,列向量col1,col2,col3可为任何类型(如字符型、数值型或逻辑型)
> patientID
> age
> diabetes
> status
> patientdata
> patientdata
patientID age diabetes status
1 1 25 Type1 Poor
2 2 34 Type2 Improved
3 3 28 Type1 Excellent
4 4 52 Type2 Poor
选取数据框中的元素:1.用下标记号。2.直接指定列明。3.$:选取给定数据框的某个特定变量
> patientdata[1:2]
patientID age
1 1 25
2 2 34
3 3 28
4 4 52
> patientdata[c(1:3)]
patientID age diabetes
1 1 25 Type1
2 2 34 Type2
3 3 28 Type1
4 4 52 Type2
> patientdata[c("diabetes","status")]
diabetes status
1 Type1 Poor
2 Type2 Improved
3 Type1 Excellent
4 Type2 Poor
> patientdata$age
[1] 25 34 28 52
用$生成diabetes和status的列联表
Excellent Improved Poor
Type1 1 0 1
Type2 0 1 1
比数据框$变量名调用变量更简单的方法是用attach()和detach(),和with
1.attach( )、detach()和with()
attach()可将数据框添加到R的搜索路径,有了它,调用数据框里的变量时,就不需要再告诉R现在调用的变量在什么数据框了。
detach()是将数据框从搜索路径中移除。
attach()和detach()像是一对兄弟,但事实上,detach不对数据本身作用,可以省略。
summary(mtcars$disp)
plot(mtcars$mpg,mtcars$disp)
plot(mtcars$mpg,mtcars$wt)
等价于
attach(mtcars)
summary(mpg)
plot(mpg,disp)
plot(mpg,wt)
detach(mtcars)
局限:当名称相同的对象不止一个,用attach()就会出问题。原始对象将取得优先权,后来的对象将被屏蔽(masked)。
with()如何得到与上面代码一样的结果呢,看如下代码
with(mtcars,{
print(summary(mpg))
plot(mpg,disp)
plot(mpg,wt)})
with(mtcars,{print(summary(mpg))
plot(mpg,disp)
plot(mpg,wt)})
注意花括号里要没有逗号,要换行隔开,我自己运行,没换行不能实现。花括号的语句都是针对数据框mtcars,如果花括号里只有一条语句,花括号可以省略
局限:赋值仅在此函数的括号内剩下。
改进:用特殊复制符<
> with(mtcars,{nokeepstates
+ keepstates<
> nookeepstates
Error: object 'nookeepstates' not found
> keepstates
Min. 1st Qu. Median Mean 3rd Qu. Max.
10.40 15.43 19.20 20.09 22.80 33.90
结果不言而喻,因为keepstates保存到with()之外的全局环境中,而nookeepstates没有,所以当离开了with(),只有keepstates存在。
2.实力标识符
通过row.names=某个变量指定实例标识符,我的理解,是我们在学校的学号,工作中的工号那样的作用
patientdata
2.2.5 因子(决定数据的分析方式和视觉呈现方式)
变量
名义型变量
没顺序的类别变量
因子
有序型变量
有顺序关系,没数量关系
因子
连续型变量
同时有顺序和变量
----
函数:factor()
作用:以整数向量形式存储类别值,从1开始,将一个由字符串(原始值)组成的内部向量映射到这些整数上。
将原始值转化成数值型变量
名义型变量--->以整数向量形式存储
disabetes
> diabetes
> diabetes #关联关系为1=Type1,2=Type2 (赋值根据字母顺序定)
[1] Type1 Type2 Type1 Type2
Levels: Type1 Type2
> str(diabetes)
Factor w/ 2 levels "Type1","Type2": 1 2 1 2
注意:针对diabetes的任何分析都将作为名义型向量对的,并自动选择适合这一测量尺度的统计方法。
有序型变量---->以整数向量形式存储(在factor()函数中药加入参数ordered=TRUE)
> status
> status
[1] "Poor" "Improved" "Excellent" "Poor"
> status
> str(status)
Ord.factor w/ 3 levels "Poor"
注意:针对此变量进行的任何分析都会作为有序型变量对待,并自动选择合适的统计方法
数值型变量(需要用到参数levels和labels)
假设男性编码成1,女性编码成2
> sex
> sex
> str(sex)
Factor w/ 2 levels "Male","Female": 1 1 2
注意:标签的顺序labels = c( "Male", "Female")和水平一致levels = c( 1, 2 )
标签"Male"和"Female"将代替1和2在结果种输出,而不是1或者2的性别变量将被当作缺失值。
> sex
> sex
> str(sex)
Factor w/ 2 levels "Male","Female": 1 2 NA
下面看普通因子和有序因子如何影响数据分析
#以向量形式输入
patientID
age
diabetes
status
#将diabetes指定为普通因子
diabetes
#将status指定为有序型因子
status
#将数据合并为数据框
patientdata
#str(object)显示对象的结果,提供R中某个对象(此例为数据框)的信息
str(patientdata)
$summary() 区别对待各个变量,显示对象的统计概要
summary(patientdata)
运行后
> str(patientdata)
'data.frame':4 obs. of 4 variables:
$ patientID: num 1 2 3 4
$ age : num 25 34 28 52
$ diabetes : Factor w/ 2 levels "Type1","Type2": 1 2 1 2
$ status : Factor w/ 3 levels "Excellent","Improved",..: 3 2 1 3
> summary(patientdata)
patientID age diabetes status
Min. :1.00 Min. :25.00 Type1:2 Excellent:1
1st Qu.:1.75 1st Qu.:27.25 Type2:2 Improved :1
Median :2.50 Median :31.00 Poor :2
Mean :2.50 Mean :34.75
3rd Qu.:3.25 3rd Qu.:38.50
Max. :4.00 Max. :52.00
运行str()后,清楚地显示diabetes是一个因子,status是有序型因子以及数据框在内部如何编码
运行summary()后,各个变量区别被对待,显示连续型变量age的最小值、最大值、均值、四分位数。而diabetes和status(各水平)这两个因子则显示频数值。
2.2.6 列表
定义:对象(或成分)的有集合。允许整合若干(可能无关)对象到单个对象名下。
因此,某个对象可能是若干向量、矩阵、数据框甚至其他列表的组合。
创建列表的函数: list()
mylist
列表中的对象命名: mylist
g
h
j
k
mylist
> mylist
$title
[1] "My First List"
[[2]]
[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"
访问列表中的元素 1.可通过双括号致命带包某个成分的数字。2.通过名称
> mylist[[1]]
[1] "My First List"
> mylist[["title"]]
[1] "My First List"
> mylist$title #要命名了才可以
[1] "My First List"
以上是基本的各种数据结构。
2.3 数据的输入
2.3.1 使用键盘输入数据
函数:edit()调用允许手动输入数据的文本编辑器
步骤:创建空数据框,其中变量名和变量的模式与最终的数据集要一致-->对这个数据对象调用文本编辑器-->键入数据-->保存
例子:创建一个名为mydata的数据框,含三个变量:age(数值型),gender(字符型),weight(数值型)-->调用文本编辑器edit()-->键入数据-->保存结果
mydata
mydata
说明:age=numeric(0)创建指定模式但不含实际数据的变量。编辑结果需要赋值回对象本身,因为edit()实际上是对对象的副本操作,不赋值到一个目标,你的所有修改将全部丢失。
关闭编辑器后,结果会保存到之前赋值的对象中,本例为mydata。fix(mydata)与edit(mydata)
直接在程序中嵌入数据集
mydatatxt
age gender weight
25 m 166
30 f 115
18 f 120
"
mydata
说明:一个字符型变量被穿鉴于存储原始数据,然后read.table()处理字符串并返回数据框、
2.2.3 从带分隔符的文本文件导入数据
mydataframe
file--带分隔符的ASCII文本文件
options--控制如何处理数据的选项。
2.2.4 导入excel数据
read.xlsx(file,n)
file--Excel工作簿所在路径
n--导入的工作表序号
其它的方式等遇到再看。