数据结构

一、向量

存储一维相同类型的数据

> x<-c(1,2 ,4,5) #创建向量
> x
[1] 1 2 4 5
> x1<-seq(1,10)#创建向量
> x1
 [1]  1  2  3  4  5  6  7  8  9 10
> x2<-seq(1,10,by=2)#步长为2
> x2
[1] 1 3 5 7 9
> x3<-seq(1,10,length=4)#长度为4
> x3
[1]  1  4  7 10
> m<-c(x=1,y=2,z=3)#向量命名
> m
x y z 
1 2 3 
> m[1]#取m向量第一个元素
x 
1 
> m[-2]#负小标表示取去掉相应的元素后的子集
x z 
1 3 
> y<-c(1,3,4)
> names(y)<- c("x1","x2","x3")
> y
x1 x2 x3 
 1  3  4 
 > mode(y)#数据类型
[1] "numeric
> range(y)#数据范围
[1] 1 4
> length(y)#数据长度
[1] 3
> which.max(y)#向量y第几个元素最大
[1] 3
> which.min(y)#向量y第几个元素最小
[1] 1

二、列表

存储一维不同类型的数据,可以将向量、数组,矩阵,数据框,列表存储在同一个列表。

#创建列表方式1
> A<-list(name="黎明",age=20,score=c(88,66,77))
> A
$name
[1] "黎明"
$age
[1] 20
$score
[1] 88 66 77

#创建列表方式2
> ID<-c(1:4)
> age<-c(11,15,16,12)
> class<-c(1,4,3,2)
> score<-c(88,77,66,95)
> studata<-list("学号"=ID,"年龄"=age,"班级"=class,"成绩"=score)
> studata
$学号
[1] 1 2 3 4
$年龄
[1] 11 15 16 12
$班级
[1] 1 4 3 2
$成绩
[1] 88 77 66 95

#列表命名
> names(studata)<-c("列表1","列表2","列表3","列表4")
> studata
$列表1
[1] 1 2 3 4
$列表2
[1] 11 15 16 12
$列表3
[1] 1 4 3 2
$列表4
[1] 88 77 66 95

#访问列表中元素
> studata$列表1
[1] 1 2 3 4
> studata$列表1[1]
[1] 1
> studata[1]
$列表1
[1] 1 2 3 4
> studata[[1]]
[1] 1 2 3 4
> studata[[1]][1]
[1] 1

#修改列表中元素
> B<-list(name="黎明",age=20,score=c(88,66,77))
> B[["score"]][2]<-55
> B
$name
[1] "黎明"
$age
[1] 20
$score
[1] 88 55 77

#删除元素
> B<-list(name="黎明",age=20,score=c(88,66,77))
> B[["score"]][2]<-55
> B[["score"]]<-NULL
> B
$name
[1] "黎明"
$age
[1] 20

#增加新元素
> B[["ID"]]<-012221
> B
$name
[1] "黎明"
$age
[1] 20
$ID
[1] 12221
#列表类型转换
as.list()其他类型转换成列表
unlist()列表转换成其他类型(原来的类型)

三、矩阵

存储二维相同类型的数据

#创建矩阵
> xx<-matrix(1:12,nrow = 3,ncol = 4)
> xx
     [,1] [,2] [,3] [,4]
[1,]    1    4    7   10
[2,]    2    5    8   11
[3,]    3    6    9   12
> xx1<-matrix(1:12,nrow = 3,ncol = 4,byrow=T)#生成以行排列的3*4矩阵
> xx1
     [,1] [,2] [,3] [,4]
[1,]    1    2    3    4
[2,]    5    6    7    8
[3,]    9   10   11   12
> nrow(xx1)#访问矩阵行数
[1] 3
> ncol(xx1))#访问矩阵列数
[1] 4
> dim(xx1)#矩阵的dim属性,两个元素分别表示矩阵的行数和列数
[1] 3 4
#矩阵的行列命名
>  rownames(xx1) <- letters[1:3]
>  colnames(xx1) <- LETTERS[23:26]
> xx1
  W  X  Y  Z
a 1  2  3  4
b 5  6  7  8
c 9 10 11 12
#访问矩阵元素
> xx1[1,]#取出xx1的第一行
W X Y Z 
1 2 3 4 
> xx1[,2]#取出xx1的第二列
 a  b  c 
 2  6 10 
 > xx1[3,2]#取出xx1的第三行第二列的元素
[1] 10
> xx1[3,c(1,4)]#取出xx1的第三行第一列和第四列的元素
 W  Z 
 9 12 
 > diag(xx1)#取对角线元素
[1]  1  6 11
> diag(diag(xx1))#取对角线元素生成新矩阵
     [,1] [,2] [,3]
[1,]    1    0    0
[2,]    0    6    0
[3,]    0    0   11
> t(xx1)#转置矩阵
  a b  c
W 1 5  9
X 2 6 10
Y 3 7 11
Z 4 8 12
> t(xx1)%*%xx1#矩阵相乘
    W   X   Y   Z
W 107 122 137 152
X 122 140 158 176
Y 137 158 179 200
Z 152 176 200 224
> crossprod(xx1,xx1)#点乘
> slove(xx1)#求逆矩阵
> eigen(xx1)#求矩阵的特征向量和特征值
> chol()#对矩阵进行 Choleskey 分解
> xx1[upper.tri(xx1)]<-0#取下三角矩阵
> xx1
  W  X  Y Z
a 1  0  0 0
b 5  6  0 0
c 9 10 11 0
> xx1[lower.tri(xx1)]<-0#取上三角矩阵

四、数据框

存储二维不同类型的数据

> xx2 <- data.frame(
+    name=c("张三", "李四", "王五"), 
+    age=c(20, 19, 22), 
+    height=c(180, 162, 175),
+    stringsAsFactors=FALSE)
> xx2
  name age height
1 张三  20    180
2 李四  19    162
3 王五  22    175
#修改行列名
row.names()
col.names()
#访问元素
> xx2[,2]
[1] 20 19 22
> xx2[3,]
  name age height
3 王五  22    175
> xx2[3,2]
[1] 22
> xx2$age
[1] 20 19 22
> attach(xx2)#绑定xx2
> name
[1] "张三" "李四" "王五"
> detach(xx2)#解绑xx2
> >xx2[xx2$age>20,]#年龄大于20岁的人
  name age height
3 王五  22    175

五、数组

存储n维相同类型的数据

#创建三维数组
> xx3 <- array(1:24, dim=c(2,3,4))
> xx3
, , 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
> xx3[,,1]
     [,1] [,2] [,3]
[1,]    1    3    5
[2,]    2    4    6
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值