数据结构与基本运算
2015-11-19 19:08
323 查看
复习篇-
1.数据类型
numeric:包含integers(整数型)和double-precision(双精度型).默认是双精度型数据
character:这种数据形式是夹在双引号或单引号之间的字符串.
logical:取TRUE or FALSE
complex:形如a+bi型的复数
raw(原始型):二进制形式保存数据
missing value(默认值):当一个元素或值在统计的时候是”不可得到的” (NA)或“缺失值”(missing value)时,相关位置可能会保留并且赋予一个特定的NA;任何NA的运算结果都是NA,is.na()函数用来检测数据是否缺失,返回结果是逻辑值。
常见的辨别和转换数据对象类型的函数有:
2.数据对象
R中的数据对象主要有6种结构:向量(vector)、矩阵(matrix)、数组(array)、因子(factor)、列表(list)和数据框(data.frame)
其中R在进行运算时或有些缺陷,微小的数字或巨大的数字在运算时经常会出现一些意外,浮点数在计算机中的表达有限,不能以任意精度存储.例如:
因此,在处理R里面的数据时,尤其在判断时,需要特别注意精度问题.
2.1向量
向量的赋值:
c()函数可以把参数首尾相连形成一个向量
对于字符型向量,函数paste()可以把对应元素连成一个字符串,长 度不同时,较短的向量会被重复使用.
此外,也可以用assign()函数对向量进行赋值.
向量的运算
对于向量的乘法、除法和乘方运算,其方法是对应向量每一个分量做运算。出现在同一个表达式的向量最好同一长度,如果长度不一,则表达式中短的向量将会被循环使用,结果中会有警告信息。此外,”%%”表示整数除法(5%%3=1),”%/%”表示求余数(5%/%3=2)
生成有序规则
产生正则序列,用符号”:”,在表达式运算中,冒号运算符的优先级最高;如果在表达式外套(),意思是将结果直接打印出来.
(r <- 3:8)
[1] 3 4 5 6 7 8
seq(from,to,by),其中by默认为1;或者为seq(from,by,length)
rep(x,times,…)或rep(x,each),其中x为要重复的对象,times表示重复的次数.注意与因子函数gl()的区别。
向量常见函数
关于向量的统计函数有:mean()、median()、var()、sd()
- 向量索引
向量下标可以用子向量取出多个元素、或只取出单个元素;下标换成逻辑运算可以取出对应元素。
如果下标取值是负整数,则表示删除相应位置的元素。
2.2矩阵
x <- matrix(c(1:6),ncol=2,dimnames =
list(c(“one”,”two”,”three”),c(“First”,”second”)),byrow = T);x
colnames(x) #访问矩阵A的行名
colnames(x) <- c(“green”,”red”) #修改行名
矩阵的运算
1.函数diag(v) #以向量v的元素为对角线元素的对角阵
diag(M) #取出矩阵M的对角线上的元素
2.函数solve(A,b) #求解线性方程组Ax=b
solve(A) #求矩阵的逆
A <- matrix(c(1:8,10),nr=3,byrow=T)
b <- c(1,1,1)
x <- solve(A,b);x
B <- solve(A)
B
[,1] [,2] [,3]
[1,] -0.6666667 -1.333333 1
[2,] -0.6666667 3.666667 -2
[3,] 1.0000000 -2.000000 1
3.函数eigen(Sm)#求对称矩阵Sm的特征值与特征向量
ev <- eigen(Sm)
ev$vectors #是Sm的特征向量组成的矩阵
ev$values #是Smde的特征值构成的向量
Sm <- crossprod(A,A) #表示t(A)%*%A,两个矩阵相乘
ev <- eigen(Sm);ev
4.函数svd(A) #对矩阵A作奇异值分解,即A=UDt(V),U,V是正交阵,D是对角阵(也是A的奇异值)
svdA <- svd(A);svdA #返回一个列表,svd$d是矩阵A的奇异值
5.函数det(A) #是求矩阵A的行列式的值
det(A)
6.函数lsfit() #返回值是最小二乘拟合的结果
x <- c(0.0,0.2,0.4,0.6,0.8)
y <- c(0.9,1.9,2.8,3.3,4.2)
lsfit.sol <- lsfit(x,y)
7.dim(A) #得到矩阵A的维数
nrow(A) #得到矩阵A的行数
ncol(A) #得到矩阵A的列数
rowSums()#求各行和
colSums()#求各列和
rowMeans()#求行均值
colMeans() #求列均值
cbind() #横向接
rbind() #纵向接
as.vector(A) #可以将矩阵转化为向量
dimnames(A) #数组各维的名字(数组特殊属性维数)
8.函数apply(A,margin,FUN) #对数组(矩阵)的某一维(若干维)进行某种运算
9.用lower.tri()和upper.tri()提取矩阵的下、上三角形
lower.tri(x,diag=FALSE)
upper.tri(x,diag=FALSE)
结果返回为逻辑矩阵,其中diag为T时包含对角元,默认不含对角元
2.3数组
数组既可以看作是带有多个下标的且类型相同的元素的集合,也可以看作是向量和矩阵的推广
array(data=NA,dim=length(data),dimnames=NULL)
其中,data表示数据,dim是维数,dimnames可以更改数组的维度名称.
dim()函数可以返回数组的维数,还可以用来将向量转换成数组或矩阵
2.4因子
因子可以看出一种变量的别名
factor(x=character(),levels,labels=levels,exclude=NA,ordered)
2.5列表
数据对象可以包含不同的数据类型,比如一个列表可以包括数值向量、逻辑向量、矩阵、字符、数组和列表等,列表中包含的对象又称为它的分量
list(var1=var1,var2=var2,…)
要访问列表的某一部分,可以用list_name[[1]]的形式访问,若要访问第二个分量前三个元素,则可以用list_name[[2]][1:3]的形式。
由于列表的分量可以被命名,因此可用list_name$var_name形式访问
函数length()、mode()、names()可以分别返回列表的长度(分量的数目)、数据类型和列表里成分的名字;list_name[[1]]选择单个元素,即列表的第一个对象,结果中不显示列表分量的名称,而list_name[1]选择第一个子列表
“`
lst <- list(name=c(“alice”,”john”,”bobo”,”jerry”),
+ sex=c(“F”,”F”,”M”,”M”),
+ age=c(13,12,13,12),
+ height=c(56.5,65.3,57.3,62.5),
+ weight=c(84.0,89.0,99.5,83.0));lst
$name
[1] “alice” “john” “bobo” “jerry”
$sex
[1] “F” “F” “M” “M”
$age
[1] 13 12 13 12
$height
[1] 56.5 65.3 57.3 62.5
$weight
[1] 84.0 89.0 99.5 83.0
lst[1]
$name
[1] “alice” “john” “bobo” “jerry”
lst[[1]]
[1] “alice” “john” “bobo” “jerry”
lst$name
[1] “alice” “john” “bobo” “jerry”“`
2.6数据框
数据框是一种矩阵形式的数据,但数据框中各列可以是不同类型的数据,每列是一个变量,每行是一个观测。数据框既可以看作是矩阵的推广,也可以看作是一种特殊的列表对象。
对于可能列入数据框中的列表有如下限值:
分量可以是向量、因子、数值矩阵、列表或其他数据框
数值向量、逻辑值、因子保持原有格式,而字符向量会被强制转化为因子,并且它的水平就是向量中出现的独立值
在数据框中以变量形式出现的向量结构必须长度一致,矩阵结构必须有一样的行数
data.frame(…,row.names=NULL,check.rows=FALSE,…)
row.names()也可以对数据框的行名进行修改
数据框的引用
(1)以数组形式访问
因为数据框的列表示变量,行表示观测数,所以可以把数据框看作为数组,可以按行、列访问
(2)以列表的形式访问数据框
data_frame_name$var_name
data_frame_name[[var_name]]
数据框绑定attach()函数
attach()函数可以把数据框中的变量”连接”到内存中,从而可以直接使用数据框中的变量名访问;取消连接用detach()函数
1.数据类型
numeric:包含integers(整数型)和double-precision(双精度型).默认是双精度型数据
character:这种数据形式是夹在双引号或单引号之间的字符串.
logical:取TRUE or FALSE
complex:形如a+bi型的复数
raw(原始型):二进制形式保存数据
missing value(默认值):当一个元素或值在统计的时候是”不可得到的” (NA)或“缺失值”(missing value)时,相关位置可能会保留并且赋予一个特定的NA;任何NA的运算结果都是NA,is.na()函数用来检测数据是否缺失,返回结果是逻辑值。
常见的辨别和转换数据对象类型的函数有:
数据类型 | 辨别函数 | 转换函数 |
---|---|---|
character | is.character() | as.character() |
numeric | is.numeric() | as.numeric() |
NA | is.na() | as.na() |
double | is.double() | as.double() |
integer | is.integer() | as.integer() |
complex | is.complex() | as.complex() |
logical | is.logical() | as.logical() |
R中的数据对象主要有6种结构:向量(vector)、矩阵(matrix)、数组(array)、因子(factor)、列表(list)和数据框(data.frame)
其中R在进行运算时或有些缺陷,微小的数字或巨大的数字在运算时经常会出现一些意外,浮点数在计算机中的表达有限,不能以任意精度存储.例如:
0.4-0.7+0.3==0 [1] FALSE > 0.0000003-0.0000007+0.0000004==0 [1] TRUE
因此,在处理R里面的数据时,尤其在判断时,需要特别注意精度问题.
2.1向量
向量的赋值:
c()函数可以把参数首尾相连形成一个向量
对于字符型向量,函数paste()可以把对应元素连成一个字符串,长 度不同时,较短的向量会被重复使用.
此外,也可以用assign()函数对向量进行赋值.
向量的运算
对于向量的乘法、除法和乘方运算,其方法是对应向量每一个分量做运算。出现在同一个表达式的向量最好同一长度,如果长度不一,则表达式中短的向量将会被循环使用,结果中会有警告信息。此外,”%%”表示整数除法(5%%3=1),”%/%”表示求余数(5%/%3=2)
生成有序规则
产生正则序列,用符号”:”,在表达式运算中,冒号运算符的优先级最高;如果在表达式外套(),意思是将结果直接打印出来.
(r <- 3:8)
[1] 3 4 5 6 7 8
seq(from,to,by),其中by默认为1;或者为seq(from,by,length)
rep(x,times,…)或rep(x,each),其中x为要重复的对象,times表示重复的次数.注意与因子函数gl()的区别。
向量常见函数
函数 | 用途 |
---|---|
length() | 长度 |
mode() | 返回向量的数据类型 |
min() | 返回向量的最小值 |
max() | 返回向量的最大值 |
range() | 返回向量的范围 |
which.min()、which.max() | 分别返回在第几个分量求到最小、最大值 |
sort() | 对向量排序 |
rev() | 将向量按原方向的反方向排列 |
rank() | 给出向量的秩,即数据排序的相对位置(非参数秩) |
append() | 为向量添加元素 |
prod() | 可以求向量连乘积 |
match() | 匹配函数 |
all() | 判断所有 |
any() | 判断部分 |
- 向量索引
向量下标可以用子向量取出多个元素、或只取出单个元素;下标换成逻辑运算可以取出对应元素。
> x <- c(1:7) > x[2] [1] 2 > x[c(2,6)] [1] 2 6 > x[x<4] [1] 1 2 3 > z <- c(4:9,NA) > z [is.na(z)] [1] NA > z [is.na(z)] <- 10 #将10赋给z里面的缺失值
如果下标取值是负整数,则表示删除相应位置的元素。
2.2矩阵
x <- matrix(c(1:6),ncol=2,dimnames =
list(c(“one”,”two”,”three”),c(“First”,”second”)),byrow = T);x
colnames(x) #访问矩阵A的行名
colnames(x) <- c(“green”,”red”) #修改行名
矩阵的运算
1.函数diag(v) #以向量v的元素为对角线元素的对角阵
diag(M) #取出矩阵M的对角线上的元素
2.函数solve(A,b) #求解线性方程组Ax=b
solve(A) #求矩阵的逆
A <- matrix(c(1:8,10),nr=3,byrow=T)
b <- c(1,1,1)
x <- solve(A,b);x
B <- solve(A)
B
[,1] [,2] [,3]
[1,] -0.6666667 -1.333333 1
[2,] -0.6666667 3.666667 -2
[3,] 1.0000000 -2.000000 1
3.函数eigen(Sm)#求对称矩阵Sm的特征值与特征向量
ev <- eigen(Sm)
ev$vectors #是Sm的特征向量组成的矩阵
ev$values #是Smde的特征值构成的向量
Sm <- crossprod(A,A) #表示t(A)%*%A,两个矩阵相乘
ev <- eigen(Sm);ev
> A [,1] [,2] [,3] [1,] 1 2 3 [2,] 4 5 6 [3,] 7 8 10 > Sm <- crossprod(A,A) #表示t(A)%*%A,两个矩阵相乘 > ev <- eigen(Sm);ev $values [1] 303.19533618 0.76590739 0.03875643 $vectors [,1] [,2] [,3] [1,] -0.4646675 0.833286355 0.2995295 [2,] -0.5537546 -0.009499485 -0.8326258 [3,] -0.6909703 -0.552759994 0.4658502
4.函数svd(A) #对矩阵A作奇异值分解,即A=UDt(V),U,V是正交阵,D是对角阵(也是A的奇异值)
svdA <- svd(A);svdA #返回一个列表,svd$d是矩阵A的奇异值
5.函数det(A) #是求矩阵A的行列式的值
det(A)
6.函数lsfit() #返回值是最小二乘拟合的结果
x <- c(0.0,0.2,0.4,0.6,0.8)
y <- c(0.9,1.9,2.8,3.3,4.2)
lsfit.sol <- lsfit(x,y)
7.dim(A) #得到矩阵A的维数
nrow(A) #得到矩阵A的行数
ncol(A) #得到矩阵A的列数
rowSums()#求各行和
colSums()#求各列和
rowMeans()#求行均值
colMeans() #求列均值
cbind() #横向接
rbind() #纵向接
as.vector(A) #可以将矩阵转化为向量
dimnames(A) #数组各维的名字(数组特殊属性维数)
8.函数apply(A,margin,FUN) #对数组(矩阵)的某一维(若干维)进行某种运算
9.用lower.tri()和upper.tri()提取矩阵的下、上三角形
lower.tri(x,diag=FALSE)
upper.tri(x,diag=FALSE)
结果返回为逻辑矩阵,其中diag为T时包含对角元,默认不含对角元
2.3数组
数组既可以看作是带有多个下标的且类型相同的元素的集合,也可以看作是向量和矩阵的推广
array(data=NA,dim=length(data),dimnames=NULL)
其中,data表示数据,dim是维数,dimnames可以更改数组的维度名称.
dim()函数可以返回数组的维数,还可以用来将向量转换成数组或矩阵
2.4因子
因子可以看出一种变量的别名
factor(x=character(),levels,labels=levels,exclude=NA,ordered)
2.5列表
数据对象可以包含不同的数据类型,比如一个列表可以包括数值向量、逻辑向量、矩阵、字符、数组和列表等,列表中包含的对象又称为它的分量
list(var1=var1,var2=var2,…)
要访问列表的某一部分,可以用list_name[[1]]的形式访问,若要访问第二个分量前三个元素,则可以用list_name[[2]][1:3]的形式。
由于列表的分量可以被命名,因此可用list_name$var_name形式访问
函数length()、mode()、names()可以分别返回列表的长度(分量的数目)、数据类型和列表里成分的名字;list_name[[1]]选择单个元素,即列表的第一个对象,结果中不显示列表分量的名称,而list_name[1]选择第一个子列表
“`
lst <- list(name=c(“alice”,”john”,”bobo”,”jerry”),
+ sex=c(“F”,”F”,”M”,”M”),
+ age=c(13,12,13,12),
+ height=c(56.5,65.3,57.3,62.5),
+ weight=c(84.0,89.0,99.5,83.0));lst
$name
[1] “alice” “john” “bobo” “jerry”
$sex
[1] “F” “F” “M” “M”
$age
[1] 13 12 13 12
$height
[1] 56.5 65.3 57.3 62.5
$weight
[1] 84.0 89.0 99.5 83.0
lst[1]
$name
[1] “alice” “john” “bobo” “jerry”
lst[[1]]
[1] “alice” “john” “bobo” “jerry”
lst$name
[1] “alice” “john” “bobo” “jerry”“`
2.6数据框
数据框是一种矩阵形式的数据,但数据框中各列可以是不同类型的数据,每列是一个变量,每行是一个观测。数据框既可以看作是矩阵的推广,也可以看作是一种特殊的列表对象。
对于可能列入数据框中的列表有如下限值:
分量可以是向量、因子、数值矩阵、列表或其他数据框
数值向量、逻辑值、因子保持原有格式,而字符向量会被强制转化为因子,并且它的水平就是向量中出现的独立值
在数据框中以变量形式出现的向量结构必须长度一致,矩阵结构必须有一样的行数
data.frame(…,row.names=NULL,check.rows=FALSE,…)
row.names()也可以对数据框的行名进行修改
数据框的引用
(1)以数组形式访问
因为数据框的列表示变量,行表示观测数,所以可以把数据框看作为数组,可以按行、列访问
(2)以列表的形式访问数据框
data_frame_name$var_name
data_frame_name[[var_name]]
数据框绑定attach()函数
attach()函数可以把数据框中的变量”连接”到内存中,从而可以直接使用数据框中的变量名访问;取消连接用detach()函数
相关文章推荐
- 数据结构例程——线性表的折半查找
- 数据结构例程——线性表的顺序查找
- 2015年大二上-数据结构-队列(3)- 负数把正数赶出队列
- 数据结构(一)
- 数据结构基础 —— 快速排序 java 实现
- 【HDU5222 2015赛码冠军杯I】【并查集找双连通 + tarjan求强连通】Exploration 双向边只能走一边是否图上存在环
- 集合框架---使用LinkedList模拟一个堆栈或者队列数据结构
- 数据结构(C++实现):栈的运用--中缀表达式转换为后缀表达式既 nyoj 257
- 数据结构 — 图的概述
- Dijkstra 算法——计算有权最短路径(边有权值)
- 树、森林及二叉树的相互转换 – 数据结构和算法50
- 十大常用数据结构
- 数据结构(Java)——查找和排序(2)
- 数据结构系列——堆
- 数据结构-题目
- 大话数据结构小结1
- Objective-C 语法之常用数据结构
- 数据结构(Java)——查找和排序(1)
- 数据结构的栈和堆
- 图论——Dijkstra+prim算法涉及到的优先队列(二叉堆)