zoukankan      html  css  js  c++  java
  • R语言之数据结构

    R拥有许多用于存储数据的对象类型,包括标量、向量、矩阵、数组、数据框、列表、因子

    1.标量:标量是只包含一个元素的向量

    > a <- 1;  # 数值型
    > b <- "China"; # 字符型
    > c <- TRUE; # 逻辑型

    2.向量:向量用于存储数值型、字符型或逻辑型数据的一维数组。通过c()函数来创建向量

    > d <- c(1,2,3);
    > e <- c("China","USA");
    > f <- c(T,F,F,T);

    3.矩阵(matrix):矩阵是一个二维数组,每个元素都拥有相同的模式(数值型、字符型、逻辑型),一般通过函数matrix()来创建矩阵

    matrix(data = NA, nrow = 1, ncol = 1, byrow = FALSE, dimnames = NULL)
    data:包含了矩阵的元素;
    nrow 和 ncol:用于指定矩阵的行数和列数;
    byrow=F:默认创建的矩阵按照列进行排列;
    dimnames:创建矩阵时可以设置行和列的名称(必须为列表形式);
    > m1 <- matrix(1:8,nrow=4)
    #默认按列填充
    > m1
         [,1] [,2]
    [1,]    1    5
    [2,]    2    6
    [3,]    3    7
    [4,]    4    8
    
    #设置byrow=T,将元素按照行进行填充
    > m2 <- matrix(1:8,nrow=4,byrow=T)
    > m2
         [,1] [,2]
    [1,]    1    2
    [2,]    3    4
    [3,]    5    6
    [4,]    7    8
    
    # 设置矩阵行和列的名称
    > m3 <- matrix(1:8,nrow=4,byrow=T,dimnames=list(c("r1","r2","r3","r4"),c("c1","c2")))
    > m3
       c1 c2
    r1  1  2
    r2  3  4
    r3  5  6
    r4  7  8
    

    4.数组(array):与矩阵类型,但是维度可以大于2,数组可以通过array()函数进行创建;数组中的数据也只能拥有一种模式(数据类型),如果数组中的数据有其他的数据类型,R会自动将所有数据转换为同一模式

    array(data = NA, dim = length(data), dimnames = NULL)
    data:包含了数组中的数据;
    dim:是一个数值型的向量,给出了各个维度下标的最大值;
    dimnames:各个维度名称标签的列表;
    > arr <- array(1:24,dim=c(4,3,2))
    > arr
    , , 1
    
         [,1] [,2] [,3]
    [1,]    1    5    9
    [2,]    2    6   10
    [3,]    3    7   11
    [4,]    4    8   12
    
    , , 2
    
         [,1] [,2] [,3]
    [1,]   13   17   21
    [2,]   14   18   22
    [3,]   15   19   23
    [4,]   16   20   24
    
    5.数据框(data.frame):数据框类似于二维表格,包含行和列,是R中最常处理的数据结构。不同的列可以包含不同的模式,每一列数据的模式必须唯一;数据框可以通过函数data.frame()进行创建
    data.frame(..., row.names = NULL, check.rows = FALSE,
               check.names = TRUE,
               stringsAsFactors = default.stringsAsFactors())
    row.names:设置数据框行的名称;
    check.rows:默认为FALSE,检查行的名称和数量是否一致;
    check.names:逻辑值,默认为TRUE,如果为TRUE,变量的名称不能够重复,如果重复,则R会自动进行转换以保证列名不同;
    stringsAsFactors :是否将字符串转换为因子(factor)类型,stringsAsFactors 默认为TRUE,即default.stringsAsFactors()的值为TRUE,将字符串转换为因子;
    > g <- data.frame(a=c(1,2,3),a=c(4,5,6),row.names=c("n1","n2","n3"),check.names=T)
    > g
       a a.1
    n1 1   4
    n2 2   5
    n3 3   6
    > g["a.1"]  #由于数据框g有重复列名a,因为设置了check.names=T,R内部会自动将第二列的列名a转换为a.1
       a.1
    n1   4
    n2   5
    n3   6

    6.列表(list):是一个有序对象的集合,列表允许整合若干对象到单个对象名下,可以通过list()函数进行创建

    > k <- list(d=5:9,e="China") # 创建列表k,包括d和e两个对象
    > l <- list(title="mylist",a=1:3,b=matrix(1:8,nrow=2),c=c("one","two"),k)  #创建列表l,l列表中包含了列表k(列表中也可以包含列表对象)
    > l
    $title
    [1] "mylist"
    
    $a
    [1] 1 2 3
    
    $b
         [,1] [,2] [,3] [,4]
    [1,]    1    3    5    7
    [2,]    2    4    6    8
    
    $c
    [1] "one" "two"
    
    [[5]]
    [[5]]$d
    [1] 5 6 7 8 9
    
    [[5]]$e
    [1] "China"
    

    7.因子(factor):类别(名义型)变量和有序类别(有序型)变量在R中称为因子。因子型数据在计算机内部存储为整型数据,因子水平属性将每个整型数据映射到一个因子水平上。因为整型数据占的存储空间较少,因    此这种方式比字符串向量更节省存储空间。

    factor(x = character(), levels, labels = levels, exclude = NA, ordered = is.ordered(x), nmax = NA)
    x:用于转换为因子的字符向量数据;
    levels:因子水平向量,因子型变量可以取得的所有值被称为因子水平;
    labels:字符型向量,labels与levels有相同的数量或者只有一个;
    excelude:生成水平时要去除的水平;
    ordered:默认为FALSE,设置为TRUE,表示有序型变量,用以确定levels 是否应该被视为有序的(按照给定的顺序);
    nmax: 设定水平数量的上限值
    > x <- factor(x=c("middle","small","big","large"),levels=c("small","middle","big","large"),ordered=T)
    > x
    [1] middle small  big    large 
    Levels: small < middle < big < large   # R在输出有序因子时会显示因子水平的顺序
    
    > y <- factor(x=c("middle","small","big","large"),levels=c("small","middle","big","large"),ordered=T,labels=c(1,2,3,4))
    > y
    [1] 2 1 3 4
    Levels: 1 < 2 < 3 < 4
    
    > z <- factor(x=c("middle","small","big","large"),levels=c("small","middle","big","large"),exclude=c("small","middle"))  
    > z
    [1] <NA>  <NA>  big   large   # 由于去除了水平small和middle,所以原始数据中水平为small和middle的值输出为NA
    Levels: big large  
    
    > x.integer <- unclass(x)   # 通过移除因子x的类属性创建整型向量x.integer  注意此时因子x本身并没有发生变化
    > x.integer
    [1] 2 1 3 4
    attr(,"levels")
    [1] "small" "middle" "big" "large" 
    > class(x.integer)
    [1] "integer"

  • 相关阅读:
    Spring@Profile注解
    day 32 子进程的开启 及其用法
    day 31 udp 协议SOCK_DGRAM
    day 30 客户端获取cmd 命令的步骤
    day 29 socket 理论
    day 29 socket 初级版
    有关 组合 继承
    day 27 多态 接口 类方法 静态方法 hashlib 摘要算法模块
    新式类和经典类的区别
    day 28 hasattr getattr serattr delattr 和带__内置__ 类的内置方法
  • 原文地址:https://www.cnblogs.com/dm-cc/p/5708385.html
Copyright © 2011-2022 走看看