最近在复习R,买了两本书,参加一个在线课程,打算系统的过一遍,这一节关注R的数据结构,R中的数据结构主要有向量,矩阵,数组,数据框和列表。
向量
向量是R中最简单的数据结构了,有数值型,字符型,逻辑型和负数型。可以进行四则运算,函数运算,逻辑运算和切片操作,其中切片操作是最重要的,也是其他几种数据结构进行数据处理时常用的。
矩阵
矩阵是R中最常用到的数据结构之一,因为R是出生于学术界,学术界的很多运算都是矩阵这种便捷的形式的,矩阵有很多的运算:
t(A) 转置
det(A) 行列式
A%*%B,crossprod 内积
A%o%B,outer 外积
A*B 乘法
diag(A) 取矩阵对角线元素
solve(A) 求逆
eigen(A) 特征值和特征向量
svd(A)奇异值分解
数组
数据只R中的重要结构之一,矩阵可以看做是二维数组,数据里面的数据都是同一种类型的。
数据框
数据框是R中最重要的数据结构之一,可以说矩阵和数据框是R里面最重要的数据结构了。如果你的一个数据里面既有数值型,又有字符型,这时候数组就不适合了,需要采用数据框的形式,数据框的数据长度一般是相等。
列表
对于不规则的数据,就需要用列表处理,列表既可以多种类型的不规则数据。可以这样说,数据框是规则的列表。
下面做《统计建模与R语言》第二章的课后练习。
> A<-matrix(1:20,nrow=4)
> A
[,1] [,2] [,3] [,4] [,5]
[1,] 1 5 9 13 17
[2,] 2 6 10 14 18
[3,] 3 7 11 15 19
[4,] 4 8 12 16 20
> B<-matrix(1:20,nrow=4,byrow=T)
> B
[,1] [,2] [,3] [,4] [,5]
[1,] 1 2 3 4 5
[2,] 6 7 8 9 10
[3,] 11 12 13 14 15
[4,] 16 17 18 19 20
> C=A+B
> C
[,1] [,2] [,3] [,4] [,5]
[1,] 2 7 12 17 22
[2,] 8 13 18 23 28
[3,] 14 19 24 29 34
[4,] 20 25 30 35 40
> E=A*B (这里是错的,根据后面的计算算理,是两个向量对应位置相乘,这里两个向量都
是n*m的,相乘的结果不可能是n*n)
> E
[,1] [,2] [,3] [,4] [,5]
[1,] 1 10 27 52 85
[2,] 12 42 80 126 180
[3,] 33 84 143 210 285
[4,] 64 136 216 304 400
> F=A[1:3,1:3]
> F
[,1] [,2] [,3]
[1,] 1 5 9
[2,] 2 6 10
[3,] 3 7 11
> G=B[,-c(3)]
> G
[,1] [,2] [,3] [,4]
[1,] 1 2 4 5
[2,] 6 7 9 10
[3,] 11 12 14 15
[4,] 16 17 19 20
> x<-rep(1:4,times=c(5,3,4,2)) > x [1] 1 1 1 1 1 2 2 2 3 3 3 3 4 4
> H<-matrix(nrow=5,ncol=5)
> for (j in 1:5){
+ for(i in 1:5)
+ {H[i,j]=1/(i+j-1)}}
> H
[,1] [,2] [,3] [,4] [,5]
[1,] 1.0000000 0.5000000 0.3333333 0.2500000 0.2000000
[2,] 0.5000000 0.3333333 0.2500000 0.2000000 0.1666667
[3,] 0.3333333 0.2500000 0.2000000 0.1666667 0.1428571
[4,] 0.2500000 0.2000000 0.1666667 0.1428571 0.1250000
[5,] 0.2000000 0.1666667 0.1428571 0.1250000 0.1111111
> det(H)
[1] 3.749295e-12
> t(H)
[,1] [,2] [,3] [,4] [,5]
[1,] 1.0000000 0.5000000 0.3333333 0.2500000 0.2000000
[2,] 0.5000000 0.3333333 0.2500000 0.2000000 0.1666667
[3,] 0.3333333 0.2500000 0.2000000 0.1666667 0.1428571
[4,] 0.2500000 0.2000000 0.1666667 0.1428571 0.1250000
[5,] 0.2000000 0.1666667 0.1428571 0.1250000 0.1111111
> eigen(H)
$values
[1] 1.567051e+00 2.085342e-01 1.140749e-02 3.058980e-04 3.287929e-06
$vectors
[,1] [,2] [,3] [,4] [,5]
[1,] -0.7678547 0.6018715 -0.2142136 0.04716181 0.006173863
[2,] -0.4457911 -0.2759134 0.7241021 -0.43266733 -0.116692747
[3,] -0.3215783 -0.4248766 0.1204533 0.66735044 0.506163658
[4,] -0.2534389 -0.4439030 -0.3095740 0.23302452 -0.767191193
[5,] -0.2098226 -0.4290134 -0.5651934 -0.55759995 0.376245545
> data2.5<-data.frame(
+ Name=c("张三", "李四", "王五", "赵六", "丁一"),
+ Sex=c("女", "男", "女", "男", "女"),
+ Age=c(14, 15, 16, 14, 15),
+ Height=c(156, 165, 157, 162, 159),
+ Weight=c(42.0, 49.0, 41.5, 52.0, 45.5) + )
> data2.5
Name Sex Age Height Weight
1 张三 女 14 156 42.0
2 李四 男 15 165 49.0
3 王五 女 16 157 41.5
4 赵六 男 14 162 52.0
5 丁一 女 15 159 45.5
> data2.5 Name Sex Age Height Weight 1 张三 女 14 156 42.0 2 李四 男 15 165 49.0 3 王五 女 16 157 41.5 4 赵六 男 14 162 52.0 5 丁一 女 15 159 45.5 > write.table(data2.5,file="C:\\Users\\Administrator\\Desktop\\data26.txt") > fd<-read.table(file="C:\\Users\\Administrator\\Desktop\\data26.txt",header = T) > write.csv(fd,file="C:\\Users\\Administrator\\Desktop\\data26.csv")






