R语言学习笔记(一)——数据结构与基本运算

时间:2022-10-31 01:30:28
一·数据类型
R语言中主要数据类型有:

数值型(numeric),实数。实际上是整数型与双精度,默认是双精度。

字符型(character),“”或‘’之间的字符串。

逻辑型(logical),只有T(TRUE)或F(FALSE)。

复数型(complex)a+bi形式的复数。

原始型(raw),二进制形式保存。

默认值(missing value),当一个元素或值在统计时“不可得到”(not available)或“缺失值”(missing value)时,相关位置保留并赋予一个特定的NA值,任何NA的运算结果都是NA。用is.na()函数检测是否有NA值的存在,返回结果为TRUE或FALSE。


character, complex,double,integer,logical,NA,numeric等类型辨别函数均为is.__(),转换函数均为as.__()



二·数据对象


R语言中的数据对象有6中:向量(vector)、矩阵(matrix)、数组(array)、因子(factor)、列表(list)和数据框(data frame)。

注意:在浮点运算中可能出现精度问题。


1.向量(vector)

向量是由相同基本元素构成的序列。用c()函数完成赋值。“<-"是赋值符号。

paste()函数可以将自变量对应元素连成字符串,长度不同时,较短的向量会背重复使用(对所有运算均适用)

也可以用assign()函数对向量赋值。


向量的运算是对每个分量做运算。四则运算(+,-,*,/),其他运算,乘方:^  ,整除:%/%,取余数:%%


用“:”产生正则序列,如1:5表示1,2,3,4,5。“:”运算级别最高。

也可以用seq()函数产生有规律的序列,rep()产生重复各种对象。


向量运算常见函数


函数

用途

length()

求向量长度

mode()

返回数据类型

min()

最小值

max()

最大值

range()

向量范围

which.min(),which.max()

何处取最值

mean()

均值

median()

中位数

var()

方差

sd()

标准差

sort()

排序

rev()

反排序

rank()

求秩(数据排序中的相对位置)

prod()

求向量连乘积

append()

向量中添加元素

sum()

求和

replace()

替换

match()

匹配

pmatch()

部分匹配

all()

判断所有

any()

判断部分



向量索引,取某一元素可用x[i]得到,也可通过其他灵活的赋值语句的到一个或多个元素的值。
> x <- c(1,3,5)
> x[2] #返回x向量的第2个元素
> (c(1,2,3)+4)[2] #先进行向量运算,再返回该向量的第2个元素
> x[c(1,3)] <- c(9,11) #将9和11赋值给x向量的第1和第3元素
把i换成逻辑语句也可以对向量进行逻辑运算。例如:
> x <- c(1,3,5)
> x < 4 #返回逻辑结果,及x向量的元素是否小于4
> x[x<4] #返回x向量里小于4的元素
> z <- c(-1,1:3,NA)
> z[is.na(z)] <- 0 #将0赋值给z向量里的NA值
> z <- c(-1,1:3,NA)
> y <- z[!is.na(z)] #将z里的非缺失值赋值给y
这种方法可以用在对分段函数的定义上。
> x<-c(-3,-2,-1,0,5,7)
> y<- numeric(length(x)) #生成与x向量长度相同的数值型向量
> y[x<0] <- 1-x[x<0] #求出x中小于0的元素对应位置,y对应位置用 1-x[x<0] 替代
> y[>=0] <- 1+x[x>=0] #求出x中大于等于0的元素对应位置,y对应位置用 1-x[x<0] 替代
如果下标取值是负整数,则表示删除相应位置的元素。
> x <- 1:10
> x[-(1:5)] #删除x向量中的第1到第5个元素


2.矩阵(matrix) 矩阵是数据用行和列排列的长方形表格,是二维数组,单元必须是相同的数据类型。用matrix()函数生成, matrix(data =NA,nrow=1, ncol=1, byrow=FALSE, dimnames = NULL) 假定A为m*n矩阵,则A的转置矩阵可用t()来计算。

矩阵函数

作用

t()

转置

%*%

矩阵乘法

*

对应元素相乘

diag()

取对角元素;

对向量应用则会产生对应的对角矩阵

只输入正整数生成对应维数的单位矩阵

solve()

求逆

eigen()

求特征值和特征向量

chol()

正定矩阵Choleskey分解为上三角矩阵

svd()

A矩阵的奇异值分解(A=UDVT

qr()

QR分解(A=QR),qr.R(qr(A)),qr.Q(qr(A))

kronecker(A,B)

Kronecker积

dim()

维数

nrow(),ncol()

行数,列数

rowSums(),colSums()

行列和

rowMeans(),colMeans()

行列均值

lower.tri(),upper.tri()

上三角、下三角矩阵(返回逻辑值)

det()

计算行列式的值

apply()

可进行各种计算

rbind(),cbind()

行、列合并



3.数组(array)

向量(一维)和矩阵(二维)的推广(多维),用array()生成。

dim()可将向量转换成数组或矩阵。

运算法则与矩阵类似。


4.因子(vector)

因子变量代表不同可能的水平。用vector()生成。

levels()提取因子水平,ordered()产生因子排序。


5.列表(list)

元素、矩阵、数组必须是同一类型的数据,如数据对象有不同类型,可采用列表list()

如LST <- list(...),则LST[[2]]访问列表第2个成分的值,LST[[2]][1:3]访问列表第2成分前3个元素。而LST[1]是选择列表的第1个分量,包含分量名。

也可用$符号返回对应成分。

length(),mode(),names()分别返回列表长度,数据类型,列表成分名。


6.数据框(data.frame)

分量必须是向量、因子、数值矩阵、列表或其他数据框;

数值、逻辑、因子保持原有格式,字符向量会被强制转换为因子;

以变量形式出现的向量结构必须保持长度一致,矩阵结构必须有一样的行数。

row.names(),col.names()变更行列名。

数据框的引用有多种方法,如a[ ,"score"], a[ ,3], a$score, a[["score"]],a[[3]]。

attach()数据框的变量“链接”到内存中,可以直接用数据框中的变量名访问。用detach()取消连接。