R语言(二)数据结构

R有许多用于存储数据的结构,包括向量、矩阵、数组、数据框、列表和因子。

向量:向量的创建、等差序列、重复序列、向量索引、NANULL值、编辑、排序;

矩阵和数组:矩阵的创建、合并、拉直、索引、行和列的计算、行列命名、数组创建、维度;

数据框和列表:数据框的创建、索引、列表的创建、索引;

因子:因子的创建、level(水平)、因子序列、因子的存储。

向量

向量以一维数组的方法管理数据,向量可以是数值型、字符型、逻辑值型(TF) 和复数型。

注:一个向量的所有元素都必须属于相同的类型。如果不是,R将强制执行类型转换。

> x1 <- c(1, 2, 3, 4)  # 创建数值型向量,可写成x1=c(1:4)
> x2 <- c("a", "b", "c", "d")  # 创建字符型向量
> x3 <- c(TRUE, FALSE, FALSE, TRUE)  # 创建逻辑型向量

常用函数

c()函数:创建向量

length():测向量长度

mode():用于检查对象的存储类型。‌ 逻辑型(logical)、数值型(numeric,包括整数和浮点数)、复数型(complex)、字符型(character)。

> w <- c(1,3,4,5,6,7) 
> length(w) 
[1] 6
> mode(w) 
[1] “numeric”

向量的运算

seq()函数产生等距间隔的数列,其基本形式为:

   seq(from = 1, to = 1, by = ((to - from)/(length.out - 1)),length.out = NULL, along.with = NULL, ...)

    from:等差数列的首项数据,默认为1;

    to:等差数列的尾项数据,默认为1;

    by:等差的数值;

    length.out:产生向量的长度

    rep(x,n)是重复函数,其中x是预重复的序列,n是重复的次数。

(seq(1,-9,length = 5))
[1]  1.0 -1.5 -4.0 -6.5 -9.0
> (seq(1,-9,by = -2))
[1]  1 -1 -3 -5 -7 -9
> (rep(1:4,2))
[1] 1 2 3 4 1 2 3 4
> (rep(1:4,each=2))
[1] 1 1 2 2 3 3 4 4

向量索引

索引,用方括号[ ] 来实现也称之为子集、下标或切片

向量1[向量2]:向量1中索引为向量2的那些元素。

R语言中,提供如下多种索引方法。

  • 给向量传入正数,它会返回此位置上的向量元素切片。它的第一个位置是 1(而不像其他某些语言一样是0) 。
  • 给向量传入负数,它会返回一个向量切片,它将包含除了这些位置以外的所有元素。
  • 给向量传入一个逻辑向量,它会返回一个向量切片,里面只包含索引为 TRUE 的元素。
  • 对于已命名的向量,给向量传入命名的字符向量,将会返回向量中包含这些名字的元素切片。
  • x[n]	第n个元素
    x[-n]	除了第n个元素的x
    x[1:n]	前n个元素
    x[-(1:n)]	第n+1至最后的元素
    x[c(1,4,2)]	指定元素
    x["name"]	名为"name"的元素
    x[x > 3]	所有大于3的元素
    x[x>3 & x<5]	区间(3,5)的元素
    

    NA:缺失值,NULL:不存在的值。

    subset( ) 函数,在向量中筛选符合条件的值,它可以自动过滤NA值。

  • which( ) 函数将返回逻辑向量中为TRUE 的位置。

  • which.min 和which.max 分别是which(min(x)) 和which(max(x)) 的简写。

    > x <- c(2,4,6,NA)
    > mean(x)
    [1] NA
    >mean(x,na.rm=T)
    [1] 4
    >x <- c(2,4,6,NULL)
    >mean(x)
    4
    > x <- c(2,4,6,8,1)
    > which(x>3)
    [1] 2 3 4
    > which.min(x)
    [1] 5
    > which.max(x)
    [1] 4
    

    向量编辑:向量中元素的删除通过减号加元素下标的形式实现。

  • 向量排序:使用sort( )等函数进行排序。

  • 常用参数

    参数描述

    选项

    x

     排序的对象

        排序的对象为数值型,也可以是字符型。

    decreasing

     排序的顺序

    默认设置为FALSE,即升序排序。设置为TRUE时,为降序排序。

    na.last

     是否将缺失值放到序列的最末尾。

         默认设置为FALSE,设置为TRUE时将向量中的NA值放到序列的最末尾。

矩阵

矩阵matrix描述二维数据,和向量相似,其内部元素可以是实数、复数、字符、逻辑型数据。矩阵matrix使用两个下标来访问元素,A[i,j]表示矩阵A第i行、第j列的元素。

多维数组array描述多维数据。array有一个特征属性叫维数向量(dim属性),它的长度是多维数组的维数,dim内的元素则是对应维度的长度。

矩阵是数组的特殊情况,它具有两个维度。

矩阵创建

matrix()函数,以向量形式输入矩阵中的全部元素,使用ncolnrow设置矩阵的行和列数。也可以使用dimnames参数设置行和列的名称。

注意:向量1~10是按列填充的,如果想要以行为单位填充,则可以将参数byrow设置为TRUE

矩阵合并

函数cbind( )把其横向拼成一个大矩阵,rbind( )把其纵向拼成一个大矩阵。

合并cbind( )时高度(行数)应该相等。rbind( )合并时宽度相等。如果参与合并的变量不一致,则循环不足后合并。

A是一个矩阵,则函数as.vector(A)可以将矩阵转化为向量。

矩阵计算

colSums( )    对矩阵各列求和。

colMeans( ) 求矩阵各列的均值。

rowSums( )   对矩阵各行求和。

rowMeans( ) 求矩阵各列的均值。

函数

功能

+ - * /

四则运算,要求矩阵的维数相同,对对应位置的各元素进行运算

colSums()

对矩阵的各列求和

rowSums()

对矩阵的各行求和

colMeans()

对矩阵的各列求均值

rowMeans()

对矩阵的各行求均值

t()

对矩阵的行列进行转置

det()

求解方阵的行列式

outer()

求解矩阵的外积(叉积)

%*%

矩阵乘法,要求第一个矩阵的列数与第二个矩阵的行数相同

diag()

对矩阵取对角元素,若对象为向量,则生成以向量为对角元素的对角矩阵

solve()

对矩阵求解逆矩阵,要求矩阵可逆

矩阵索引

x[i, j]    下标为(i,j)的元素

x[i, ]    i

x[ ,j]    第j

x[ ,c(1,3)]  13

x["name",]   名为"name"的行

(w <- seq(1:10))
 [1]  1  2  3  4  5  6  7  8  9 10
> (a <- matrix(w,nrow = 5,ncol = 2))
     [,1] [,2]
[1,]    1    6
[2,]    2    7
[3,]    3    8
[4,]    4    9
[5,]    5   10
> (a <- matrix(w,nrow = 5,ncol = 2,byrow = T,dimnames = list(paste0('r',1:5),paste0('l',1:2))))
   l1 l2
r1  1  2
r2  3  4
r3  5  6
r4  7  8
r5  9 10
> (x1 <- cbind(c(1,2),c(3,4)))
     [,1] [,2]
[1,]    1    3
[2,]    2    4
> (A <- matrix(1:6,2,3))
     [,1] [,2] [,3]
[1,]    1    3    5
[2,]    2    4    6
> as.vector(A)
[1] 1 2 3 4 5 6
> (A <- matrix(1:16,4,4))
     [,1] [,2] [,3] [,4]
[1,]    1    5    9   13
[2,]    2    6   10   14
[3,]    3    7   11   15
[4,]    4    8   12   16
> colSums(A)
[1] 10 26 42 58
> colMeans(A)
[1]  2.5  6.5 10.5 14.5
> rowSums(A)
[1] 28 32 36 40
> rowMeans(A)
[1]  7  8  9 10

数组

通过函数array( )方便地创建数组。

对于矩阵和数组,dim( ) 函数将返回其维度的整数值向量。

对于矩阵,函数nrow( ) ncol( ) 将分别返回行数和列数。

> (w_array <- array(1:30,dim = c(2,5,3)))
, , 1
     [,1] [,2] [,3] [,4] [,5]
[1,]    1    3    5    7    9
[2,]    2    4    6    8   10
, , 2
     [,1] [,2] [,3] [,4] [,5]
[1,]   11   13   15   17   19
[2,]   12   14   16   18   20
, , 3
     [,1] [,2] [,3] [,4] [,5]
[1,]   21   23   25   27   29
[2,]   22   24   26   28   30
#建立一个三维数据的数组,其维度是2*5*3。在结果中会依次展示3个2行5列的矩阵。

> a_matrix <- matrix(1:10,nrow = 5,ncol = 2)
> w_array <- array(1:30,dim = c(2,5,3))
> dim(a_matrix)
[1] 5 2
> dim(w_array)
[1] 2 5 3
> nrow(a_matrix)
[1] 5
> ncol(a_matrix)
[1] 2

数据框

在实际操作中,通常会用数据框的一列代表某一变量属性的所有取值,用一行代表某一样本数据。

data.frame( )函数可以直接把多个向量建立为一个数据框,并为列设置名称。

通过names(<数据框>)来读取并编辑列名称。

索引:

索引列<数据框对象>[ ,列下标向量],直接获取相应列的所有元素,并以数据框对象形式返回。例:iris[,2]

索引行<数据框对象>[行下标, ],直接获取相应行的所有元素,例如:iris[1:2,]

> (my.datasheet <- data.frame(site = c('A','B','A','A','B'),
+ season = c('winter','summer','summer','spring','fall'),
+ pH = c(7.4,6.3,8.6,7.2,8.9)))
  site season  pH
1    A winter 7.4
2    B summer 6.3
3    A summer 8.6
4    A spring 7.2
5    B   fall 8.9
> (my.datasheet <- data.frame(site = c('A','B','A','A','B'),
+ season = c('winter','summer','summer','spring','fall'),
+ pH = c(7.4,6.3,8.6,7.2,8.9)))
  site season  pH
1    A winter 7.4
2    B summer 6.3
3    A summer 8.6
4    A spring 7.2
5    B   fall 8.9
iris$Sepal.Length
iris[["Sepal.Length"]]
iris[[2]]
iris[,2]
iris[1:2,]

列表

list( )可以用于创建列表对象。

使用函数length( )来检查列表成分的个数

通过函数unlist( )把列表中的所有元素转换为向量元素,转换后的向量元素的个数和列表中所有数据对象的个数相同。
索引:

x[n]  列表显示元素n

x[[n]]  列表的第n个元素

x[["name"]]或x$name :名为"name"的元素

> (my.list <- list(stud.id = 34453,
+                  stud.name = '张三',
+                  stud.marks = c(14.3,12,15,19)))
$stud.id
[1] 34453
$stud.name
[1] "张三"
$stud.marks
[1] 14.3 12.0 15.0 19.0
> unlist(my.list)
    stud.id   stud.name stud.marks1 stud.marks2 stud.marks3 stud.marks4 
    "34453"      "张三"      "14.3"        "12"        "15"        "19“
> length(my.list)
[1] 3

因子

level(水平)来表示所有可能的取值。

如果数据集有取值个数固定的分类变量,因子特别有用。通过factor( )函数创建因子,使用格式:

 factor(x = character(), 

  levels,  labels = levels,

  exclude = NA,  ordered = is.ordered(x),  nmax = NA)

参数

描述

x

表示需要创建为因子的数据,是一个向量

levels

表示所创建的因子数据的水平,如果不指定的话,就是x中不重复的所有值

labels

用来标识这一水平的名称,与水平一一对应,方便用户识别

exclude

表示有哪些水平是不需要的

ordered

一个逻辑值,若为TRUE,表示有序因子,为FALSE则表示无序因子

nmax

表示水平个数的上限

通过gl( )函数创建因子。

使用格式:gl(n, k, length = n*k,  labels = seq_len(n),  ordered = FALSE)

参数

描述

n

表示因子水平的个数

k

表示每个水平的重复数

length

表示生成的序列的长度

labels

一个n维向量,表示因子水平

ordered

一个逻辑值,若为TRUE,表示有序因子,为FALSE则表示无序因子

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值