zoukankan      html  css  js  c++  java
  • 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]
    拒绝低效率勤奋,保持高效思考
  • 相关阅读:
    洛谷P2580(trie)
    bzoj4373:算数天才与等差数列
    校门外的树(3)
    Ubuntu系统配置的一些要点
    字符串hash
    洛谷P3387 缩点模板
    3dmax多个版本软件的安装包以及安装教程
    【3dsmax2016】安装图文教程、破解注册以及切换语言方法
    photoshop常用快捷键大全
    unity3d脚本语言中的引用类型
  • 原文地址:https://www.cnblogs.com/timeisbiggestboss/p/7118861.html
Copyright © 2011-2022 走看看