数据结构与基本运算

来源:互联网 发布:端口镜像 流量分析 编辑:程序博客网 时间:2024/06/08 04:55

复习篇-
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()

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()函数

0 0
原创粉丝点击