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)把i换成逻辑语句也可以对向量进行逻辑运算。例如:
> x[2] #返回x向量的第2个元素
> (c(1,2,3)+4)[2] #先进行向量运算,再返回该向量的第2个元素
> x[c(1,3)] <- c(9,11) #将9和11赋值给x向量的第1和第3元素
> 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()取消连接。