数据类型与数据结构

Posted 数据挖掘与R语言

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数据类型与数据结构相关的知识,希望对你有一定的参考价值。

想要用好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"

小结

这几种常用的数据类型、数据结构之间有一定的关系,可以相互转换。向量和矩阵可以看做是数组中的一维和二维的特殊情形,数据框是列表的一种特殊情形,数据框和矩阵在一定条件下可以相互转换。


长按识别图中二维码




以上是关于数据类型与数据结构的主要内容,如果未能解决你的问题,请参考以下文章

Python基础--可变数据类型与不可变数据类型

数据结构与数据类型有啥区别?

基本数据类型,引用数据类型与比较

JavaScript 数据类型与类型判断详解

数据类型与类型转

变量与基本数据类型