rstudio的数据集怎么建立和保存_《R语言实战》之 创建数据集(第二章,各种数据结构)...

数据集

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--导入的工作表序号

其它的方式等遇到再看。

你可能感兴趣的:(rstudio的数据集怎么建立和保存_《R语言实战》之 创建数据集(第二章,各种数据结构)...)