R有许多用于存储数据的结构,包括向量、矩阵、数组、数据框、列表和因子。
向量:向量的创建、等差序列、重复序列、向量索引、NA和NULL值、编辑、排序;
矩阵和数组:矩阵的创建、合并、拉直、索引、行和列的计算、行列命名、数组创建、维度;
数据框和列表:数据框的创建、索引、列表的创建、索引;
因子:因子的创建、level(水平)、因子序列、因子的存储。
向量
向量以一维数组的方法管理数据,向量可以是数值型、字符型、逻辑值型(T、F) 和复数型。
注:一个向量的所有元素都必须属于相同的类型。如果不是,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()函数,以向量形式输入矩阵中的全部元素,使用ncol和nrow设置矩阵的行和列数。也可以使用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)] 第1和3列
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( )函数可以直接把多个向量建立为一个数据框,并为列设置名称。
索引:
索引列<数据框对象>[ ,列下标向量],直接获取相应列的所有元素,并以数据框对象形式返回。例: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( )来检查列表成分的个数
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则表示无序因子 |
数据结构&spm=1001.2101.3001.5002&articleId=143085369&d=1&t=3&u=d65e07ee5fc44391b1badf2f7a5052dd)
3957

被折叠的 条评论
为什么被折叠?



