R---数据以及数据的结构
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了R---数据以及数据的结构相关的知识,希望对你有一定的参考价值。
参考技术A 在R中,常见的数据类型一共有5种:
字符型character,
数值型numeric,
整形integer,
复数型complex,
逻辑型logical
还需要注意的是,如果我们直接输入1,2,3,4...得到的是numeric类型。如果想要输入integer类型,需要输入1L,2L,3L,4L...
Inf表示无穷大,-Inf表示无穷小。
同理1/0表示无穷大,-1/0表示无穷小
如果输入0/0则会得到Nan这样的显示,Nan表示在计算的时候出现错误。
而如果出现Na则表示缺失值。我们可以认为Na包含了NaN。
在R语言中,常见的数据的结构有以下几种:
向量,列表,矩阵,数组,数据框,因子
特点:相同类型,序列
如何创建向量?
1、创建初始向量:vector(‘数据类型’,数据个数),例如,我们输入:x<-vector(\'numeric\',10),可以得到如下结果,可以看到x的类型为数值型numeric。
2、用vector其实等同于直接用数据类型后面跟数据个数,上面的例子其实就可以写成numeric(10),运行之后可以得到相同的结果:
3、如果需要创建的向量是等差为1的等差数列,如1到20的数列,我们可以直接写成:
1:20
4、更多情况下,我们用c()函数用来创建向量,把数据对象连结在一起(concatenate)
例如:
c(1,2)
如上图可见,这里的数据类型class显示的是“numeric”,说明c(1,2)生成的向量里面的数据类型是数值型,而非整形integer。如果想要得到整形的向量,我们需要输入:
c(1L,2L)
如果输入c(TRUE,FALSE,FALSE,TRUE),得到逻辑型向量
如果输入c(\'初中\',\'高中\',\'大学\'),得到文本型向量
注意
就像我们之前提到的,向量里面必须得是相同类型的数据。如果在创建向量的时候,输入了不同类型的数据,R会强制将不同类型的数据转换成相同的数据类型。
例如,输入c(1.7,\'a\'),最后生成的结果如图,1.7被转成了字符型,我们也可以从class里面看到类型是字符型character。
输入c(T,2),最后生成的结果如图,T由逻辑型转成了数值型。
输入c("a",T),得到的结果如图所示,T由逻辑型转成了字符型。
上面提到的这几种转换,通常都是R强制地悄悄地执行的。如果我们自己想要转换数据类型,则应该应用:
as.numeric/logical/character/complex(向量名) 来进行转换。
特点:列表和向量相同的地方在于,二者都是序列;不同的地方在于,列表是由不同类型的对象组成的,而向量则由同样类型的数据组成。
写作:list(name1=object1,name2=object2,…)
例如:输入x<-list(1,\'a\',T,b=c(1+4i,2-3i)),我们可以明显看到list()里面的每个部分类型都不同(数值,字符,逻辑值,向量),输出结果如图:
是一类特殊向量,维度属性。
matrix(数据, nrow = 几行, ncol = 几列, byrow = FALSE/T是否按行排列, dimnames = list(c(行名),c(列名 )))
斜体的部分表示可以不写。
例如,我们想要输入1-8,2行,4列,按照行排列,行名为张三、王五,列名为吃喝玩乐。可以得到如下图:
matrix(1:8,2,4,byrow=T,dimnames = list(c(\'张三\',\'王五\'),c(\'吃\',\'喝\',\'玩\',\'乐\')))
矩阵还有另外一种方法可以创建,用cbind() rbind()创建
例如有x,y两个向量。cbind()是按照列来连接xy(x一列,y一列);rbind是按照行连接xy(x一行,y一行)
注意 :如果用rbind()来合并矩阵或者向量或者表格,必须要求二者列名一致
矩阵还有另外一种方法可以创建,创建一个向量,而后添加维度
t()表示矩阵的转置
array,和matrix最大的区别在于array的维度更多,有三个维度。
我们可以理解为matrix有行、列两个维度;但是array多了一个面板维度(分成几块)。
array(数据,dim=c(几行,几列,几块),dimnames = list(c(行名),c(列名),c(板块名)))
例如:
array(1:12,dim=c(2,3,2),dimnames=list(c(\'从前\',\'现在\'),c(\'衣\',\'食\',\'行\'),c(\'北京\',\'上海\')))
得到如下结果:
数据框是R的一个重要数据类型,用来存储表格数据。可认为是特殊类型的列表,列表中每个元素(每类)都有同样的长度。每一列可以是不同的类型(矩阵是相同的)。可以通过调用data.matrix()将数据框转化为矩阵。
数据框很像我们在使用SQL的时候来定义表格之后,给表格中的各列赋值的情况。
data.frame(列1=向量,列2=向量)
例如:data.frame(foo=1:4,bar=c(T,T,F,F))
nrow(x)----x有几行
ncol(x)----x有几列
特点:用于创建分类数据,两种类型:有序/无序。
可以写成这样的形式:
factor(c("第一类","第二类","第三类",...),levels=c("第一类","第二类","第三类"),ordered = T)
ordered默认为F。
例如:factor(c("小学","初中","高中","小学"),levels=c("小学","初中","高中"),ordered = T)
得到如下结果:
我们如果不对level进行定义,出现如下结果:
此时虽然有比较,但是初中<高中<小学,这样的结果是根据字母发音排序的结果,或许并不是我们想要的,所以如果我们对排序有要求,还是要对levels进行定义。levels=c("第一类","第二类","第三类"),理解为
"第一类"<"第二类"<"第三类"
我们如果不对ordered进行定义,出现如下结果:
此时为无序数据,无比较。
我们还有另外一种方法来定义因子:gl
gl(有几类, 循环几次, labels = c("第一类名称", "第二类名称"),ordered=T)
例如:gl(2,4),表示有两个变量(2),每一个循环4次
例如:gl(2, 8, labels = c("女", "男"),ordered=T),表示有两个变量,各循环8次,这两个变量分别表示为“女”和“男”,排序。
注意,这里和上一个例子一样,本来应该是给出两个变量用1和2表示,labels相当于给1和2加了“女”和“男”的标签。所以排序之后显示“女”<“男”,其背后真实的情况是1<2 。
例如: gl(2, 8, labels = c("女", "男"),ordered=T,length=32),在以上的基础上,规定一共有32个对象
通过我们以上的论述,我们知道了5种数据类型和几种常见的对象形态。
这些是R中非常基础但是十分重要的内容,需要多看几遍才能记得更清楚。
数据类型与数据结构
想要用好R语言来进行数据分析和挖掘,首先你得了解R语言的数据类型以及数据结构的构成,本文主要介绍R中的数据类型以及数据结构。
数据类型
R中的数据类型主要包括数值型, 字符型,因子型,逻辑型,缺失数据
数值型numeric
数值型数据是计算中最常用的数据类型,它是包括四则运算、乘方、开方、阶乘、排列组合等在内的运算都会用到的一种数据类型。
> 1
[1] 1
> 1+2
[1] 3
> 2^10
[1] 1024
字符型character
字符型数据存储字符型数据,也可用来作为列名,文本挖掘的数据类型也主要是以字符型数据为主。
> "Paul"
[1] "Paul"
> "Clippers"
[1] "Clippers"
因子型factor
因子型在R中用到的不是很多,它主要用来存储离散的分类数据或者有序
> factor("A")
[1] A
Levels: A
> factor(c("B","A","C"))
[1] B A C
Levels: A B C
> factor(c("B","A","C"),levels = c("A","B","C"),ordered = T)
[1] B A C
Levels: A < B < C
逻辑型logical
逻辑型向量在条件判断语句中发挥着比较重要的作用
> 1>2
[1] FALSE
> 2==2
[1] TRUE
缺失数据missing data
缺失数据类型有三种,NA,NaN和NULL,三种含义不相同,NA指一般意义上的数据缺失,NaN表示数据无意义,NULL表示空集。
数据结构
R中的基本数据结构有五种,向量、矩阵、数组、数据框、列表。五种数据格式都有各自的特点,下面我来逐一进行介绍。
向量vector
向量是一维数据,它所存储的数据类型必须是一致的,否则R会将强制转换将其统一格式。
创建向量
向量的一般创建方式是c(),如score=c(43,81,61,53,61),即创建了一个名为score的数值型向量,它包含五个元素,分别是43,81,61,53,61
a:b 生成a到b的数列,间隔为1
> 1:5
[1] 1 2 3 4 5
seq(from = a, to = b, by = n)生成间隔为1的a到b的数列
> seq(from=1,to=10,by=2)
[1] 1 3 5 7 9
rep(x, times) 生成重复n次x的向量(x本身可以是向量)
> rep(1,5)
[1] 1 1 1 1 1
> rep(1:2,3)
[1] 1 2 1 2 1 2
提取向量元素
提取元素采用[ ]来进行操作
> score[2] #取单个元素
[1] 81
> score[c(1,2)] #取多个元素
[1] 43 81
> score[score>60] #按条件提取
[1] 81 61 61
> score[-4] #删除元素
[1] 43 81 61 61
> c(score,100) #添加元素
[1] 43 81 61 53 61 100
> score[4] <- 100 #修改元素
> score
[1] 43 81 61 100 61
提取向量的索引
> which(score>60) #按条件提取索引
[1] 2 3 5
> which(score==81)
[1] 2
> which.max(score) #取最大值索引
[1] 2
> which.min(score) #取最小值索引
[1] 1
> match(81,score) #匹配提取索引
[1] 2
矩阵matrix
矩阵是一个二维数据集,它所存储的数据类型与向量一样,必须是一致的。
创建矩阵
matrix(data = NA, nrow = 1, ncol = 1, byrow = FALSE,dimnames = NULL)
M <- matrix(data = c(c(183,198,206,211,216),c(43,81,61,53,61)),nrow = 5,ncol=2,byrow=FALSE,dimnames = list(c("Pual","Kobe","James","Duncan","O'Neal"),c("height","score")))
> M
height score
Pual 183 43
Kobe 198 81
James 206 61
Duncan 211 53
O'Neal 216 61
提取矩阵元素
> M[1,2] # 提取单个元素
[1] 43
> M[,2] # 提取整列数据
Pual Kobe James Duncan O'Neal
43 81 61 53 61
> M[1,] # 提取整行数据
height score
183 43
数组array
数组是向量和矩阵的拓展,它可以是一维、二维,也可以是多维的。
创建数组
array(data = NA, dim = length(data), dimnames = NULL)
> A <- array(1:24, c(2,3,4))
> A
, , 1
[,1] [,2] [,3]
[1,] 1 3 5
[2,] 2 4 6
, , 2
[,1] [,2] [,3]
[1,] 7 9 11
[2,] 8 10 12
, , 3
[,1] [,2] [,3]
[1,] 13 15 17
[2,] 14 16 18
, , 4
[,1] [,2] [,3]
[1,] 19 21 23
[2,] 20 22 24
提取数据元素
> A[1,1,1]
[1] 1
> A[,,4]
[,1] [,2] [,3]
[1,] 19 21 23
[2,] 20 22 24
> A[,2,4]
[1] 21 22
数据框data.frame
数据框是二维数据集,它和结构化数据库中的表结构类似,它的每一列数据中的数据类型必须相同,但是不同列之间的数据类型可以不一样。它是在数据分析和挖掘中用到的最多的一种数据结构。
创建数据框
data.frame(..., row.names = NULL)
> dat <- data.frame(name=c("Pual","Kobe","James","Duncan","O'Neal"),
+ height=c(183,198,206,211,216),
+ score=c(43,81,61,53,61),
+ team=c("Clippers","Lakers","Cavaliers","Lakers","Spurs"),
+ stringsAsFactors = F)
> dat
name height score team
1 Pual 183 43 Clippers
2 Kobe 198 81 Lakers
3 James 206 61 Cavaliers
4 Duncan 211 53 Lakers
5 O'Neal 216 61 Spurs
提取数据框元素
提取列用$加列名或者[["列名"]]
> dat$name
[1] "Pual" "Kobe" "James" "Duncan" "O'Neal"
> dat[["height"]]
[1] 183 198 206 211 216
数据框同矩阵一样是二维的,同样可以采用提取矩阵元素的方式来提取数据框中的元素。
列表list
列表可以同时包含以上一种或者多种数据结构,一般用它来存储非结构化的数据。
创建列表
list(...)
> L <- list(name="Pual",height=183,
+ scores=c(43,21,22,23,18))
> L
$name
[1] "Pual"
$height
[1] 183
$scores
[1] 43 21 22 23 18
提取列表元素
> L$scores
[1] 43 21 22 23 18
> L[["name"]]
[1] "Pual"
小结
这几种常用的数据类型、数据结构之间有一定的关系,可以相互转换。向量和矩阵可以看做是数组中的一维和二维的特殊情形,数据框是列表的一种特殊情形,数据框和矩阵在一定条件下可以相互转换。
长按识别图中二维码
以上是关于R---数据以及数据的结构的主要内容,如果未能解决你的问题,请参考以下文章