R的基础学习之数据结构
来源:http://blog.qiubio.com:8080/archives/3753/4
1.atomic vector :一维的,放置同一类型数据的数据类型
1.1创建:由c()函数 ,seq()函数,rep()等函数创建。
>a<-c(a,b,c) #combine,将c()函数的参数联合起来成一个向量 >a<-seq(1,3) #sequence,以一定的间隔形成一个向量(等比数列),默认项差为1. >a #1,2,3 >a<-1:3 >a #1,2,3 >a<-rep(1,100) #repeat,第一个参数为重复的量,第二个参数为重复次数.
#rep(x,times=1,length.out=NA,each=1)
>a<-rep(c(1,2),times=2)
>a
[1]1 2 1 2 #向量重复
>a<-rep(c(1,2),each=2)
[1]1 1 2 2 #向量元素重复
1.2访问方式:通过索引或是通过names属性
>a<letters[1:5] >names(a)<-LETTERS[1:5] #属性的个数必须和元素个数一致 >a[1] #[1] "a" >a["A"] # A a
2.list :一维的,可以放置不同类型数据
> a <- list(num = 1:3, alphabet = letters[1:3]) >names(a) #[1] "num" "alphabet" >a$num #通过$访问元素 [1]1 2 3 >a[[1]] #通过[[]]访问元素 [1]1 2 3 >a[1] #通过[]获得子list $num [1] 1 2 3
3.matrix:二维的,放置同种类型数据
3.1用matrix函数创建矩阵
>a<-11:22 >m<-matrix(a,ncol=3,nrow=4)#ncol,列数;nrow,行数 >m ## [,1] [,2] [,3] ## [1,] 11 15 1 9 ## [2,] 12 16 20 ## [3,] 13 17 21 ## [4,] 14 18 22 >m[7] #使用访问atomic vector的方法访问matrix [1] 17 >m[3,2]#使用访问matrix的方法访问 [1] 17 >m[,2]#访问第二列 [1] 15 16 17 18 >m[,2,drop=FALSE]#访问第二列,但仍保持matrix形式 [,1] [1,] 15 [2,] 16 [3,] 17 [4,] 18 ####矩阵的方法和属性#### >dim(m) #矩阵的大小 [1] 4 3 >ncol(m)#矩阵的列数 [1] 3 >nrow(m)#矩阵的行数 [1] 4 >rownames(m)<-letters[1:4]#增加row的名称 >colnames(m)<-Letters[1:3]#增加column的名称 >m ## A B C ## a 1 2 3 ## b 4 5 6 ## c 7 8 9 ## d 10 11 12 >d<-matrix(1:12,ncol=3,nrow=4) >row<-rbind(d,m) #rbind=row bind 增加row,column保持不变 >col<-cbind(d,m) #cbind=column bind 增加column,row保持不变 >t(d) #t()函数(transpose),转置。
4.Data frame:Data frame就是由一系列长度相等的vectors构成。它继承了vector的所有方法,包括atomic vector和list的方法,比如访问某一列可以使用'$'符号。它是2维的,它一样也有和matrix相同的方法。
4.1用data.frame()函数创建
> df <- data.frame(A = 1:3, B = letters[1:3]) #接受的参数是atomic vector > df ## A B ## 1 1 a ## 2 2 b ## 3 3 c >str(df) ## 'data.frame': 3 obs. of 2 variables: ## $ A: int 1 2 3 ## $ B: Factor w/ 3 levels "a","b","c": 1 2 3 >df$A #访问元素,返回一个atomic vector. ##[1] 1 2 3
>is.atomic(df$A)
[1] TRUE >df[["B"]] ## [1] a b c ## Levels: a b c
>is.atomic([["B"]])
[1] TRUE >df[1,] #和matrix一样的方法 ## A B 1 1 a >cbind(df,C=0) ## A B C ## 1 1 a 0 ## 2 2 b 0 ## 3 3 c 0
下表总结了不同数据结构取值的方法。赋值使用'<-'可以使用”<-“, ”=“, 以及”->“三种形式的赋值符号。但本书只推荐使用'->'做为赋值符号。
降维 | 保持 | |
---|---|---|
Vector | x[[1]] |
x[1] |
List | x[[1]] |
x[1] |
Factor | x[1:4, drop = T] |
x[1:4] |
Array | x[1, ] or x[, 1] |
x[1, , drop = F] or x[, 1, drop = F] |
Data frame | x[, 1] or x[[1]] |
x[, 1, drop = F] or x[1] |
拒绝低效率勤奋,保持高效思考