您的位置:首页 > 理论基础 > 数据结构算法

数据结构与基本运算

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()函数用来检测数据是否缺失,返回结果是逻辑值。

常见的辨别和转换数据对象类型的函数有:

数据类型辨别函数转换函数
characteris.character()as.character()
numericis.numeric()as.numeric()
NAis.na()as.na()
doubleis.double()as.double()
integeris.integer()as.integer()
complexis.complex()as.complex()
logicalis.logical()as.logical()
2.数据对象

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()判断部分
关于向量的统计函数有:mean()、median()、var()、sd()

- 向量索引

向量下标可以用子向量取出多个元素、或只取出单个元素;下标换成逻辑运算可以取出对应元素。

> 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()函数
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: