最近在复习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")