as.array(x),as.data.frame(x),as.numeric(x),as.logical(x),as.complex(x),as.character(x),...转换变量类型;使用如下命令可得到全部列表,methods(as)
factor():将一个向量转化为一个因子
2.变量信息
is.na(x),is.null(x),is.array(x),is.data.frame(x),is.numeric(x),is.complex(x),is.character (x),...检验变量的类型;使用如下命令得到全部列表,methods(is)
length(x):x中元素的个数
dim(x):查看变量的维数;重新设置的维数,例如dim(x)=c(3,2)
dimnames(x):重新设置对象的名称
nrow(x):行的个数
ncol(x):列的个数
class(x):得到或设置x的类;class(x)<-c(3,2)
unclass(x):删除x的类
attr(x,which):得到或设置x的属性which
attributes(obj):得到或设置obj的属性列表
fix,edit:对数据框数据进行表格形式的编辑
3.数据选取和操作
which.max(x):返回x中最大元素的指标
which.min(x):返回x中最小元素的指标
rev(x):翻转x中所有的元素
sort(x):升序排列x中的元素;降序排列使用:rev(sort(x))
cut(x,breaks):将x分割成为几段(或因子);breaks为段数或分割点向量
match(x,y):返回一个和x长度相同且和y中元素相等的向量不等则返回NA
which(x==a):如果比较操作为真(TRUE),返回向量x的指针
choose(n,k):组合数的计算
na.omit(x):去除缺失值(NA)(去除相关行如果x为矩阵或数据框)
na.fail(x):返回错误信息,如果x包含至少一个NA
unique(x):如果x为向量或数据框,返回唯一值
这是最后一篇讲解有关矩阵操作的博客,介绍有关矩阵的函数,主要有 rowSums() , colSums() , rowMeans() , colMeans() , apply() , rbind() , cbind() , row() , col() , rowsum() , aggregate() , sweep() , max.col() 。
下面通过例子来了解这些函数的用法:
我们知道,通过下标索引 [i, j] 可以访问矩阵的某一部分,索引如果没有提供意味着“所有行”或“所有列”。来看个例子,比如:
在R中,可以用一些特殊的函数来进行矩阵的行、列计算。来看些例子:
上述矩阵的行、列计算,还可以使用 apply() 函数来实现。 apply() 函数的原型为 apply(X, MARGIN, FUN, ...) ,其中: X 为矩阵或数组; MARGIN 用来指定是对行运算还是对列运算, MARGIN=1 表示对行运算, MARGIN=2 表示对列运算; FUN 用来指定运算函数; ... 用来指定 FUN 中需要的其它参数。来看些例子:
用 apply() 函数来实现上面的例子
apply() 函数功能很强大,我们可以对矩阵的行或列进行其它运算,例如:
如果矩阵存在 NA 值,可通过设置 na.rm=TRUE 来忽略 NA 值,然后再计算。比如:
甚至我们还可以自定义运算函数,来看个例子:
在R中, rbind() 和 cbind() 函数可分别为矩阵添加行和列,来看一个例子:
在R中, row() 和 col() 函数将分别返回元素的行和列下标矩阵,来看个例子:
通过这两个函数,可以获取矩阵的对角元素以及上下三角矩阵,例如:
有时,你可能需要对每行进行分组,然后组内每列求和。在R中可以用 rowsum() 函数来解决,而且效率也非常高。先看个例子:
你也可以用 aggregate() 函数获得类似结果:
有人就会问“为啥没有列分组求和的操作?”,其实你可以先将矩阵转置,然后行分组求和;这两步就等同于列分组求和。
sweep() 函数的原型为 sweep(x, MARGIN, STATS, FUN = "-", check.margin = TRUE, ...) ,其中: x 为矩阵或数组; MARGIN 用来指定是对行运算还是对列运算, MARGIN=1 表示对行运算, MARGIN=2 表示对列运算; STATS 表示想要清除的统计量; FUN 用来指定运算函数,默认为减法 - ; check.margin 用来核实 x 的维度是否与 STATS 的匹配,如果事先知道它们匹配的话,将其设为 FALSE 将提高运算速度; ... 用来指定 FUN 中需要的其它参数。来看些例子:
事实上,通过改变 FUN 参数的具体形式或自定义函数, sweep() 函数可以实现很多不同操作,这里就不细讲了。
max.col() 函数返回矩阵每行最大值所在的列位置(即列下标),其原型为 max.col(m, ties.method = c("random", "first", "last")) ,其中: m 为矩阵;当存在多个最大值时, ties.method 指定用哪种方式来处理这种情况,默认为"random"(随机),"first"指使用第一个最大值,"last"指使用最后一个最大值。来看个官网例子:
我们也可以结合 apply() 和 which.max() 函数来实现 max.col(mm, 'first') 。看个例子,
R矩阵的最后一部分内容就讲到这。
如若有遗漏,后期将会添加至本博客。
sum(向量名) :求和
max(向量名) :返回向量最大值
min(向量名) :返回向量最小值
range(向量名) :返回向量中的上界和下界
mean(向量名) :返回向量平均值
var(向量名) :返回向量的方差
sd(向量名) :返回向量的标准差
prod(向量名) :向量中所有值的乘积
median(向量名) :求中位数
quantile(向量名) :求分位数, quantile(x,c(0.4,0.5,0.8) 求出向量x的四分位,五分位和八分位值。
abs(向量名) :返回绝对值
sqrt(向量名) :计算平方根
log(向量名/值,base=底数值) :取对数
exp(向量名) :计算向量中每个元素的指数
sin(向量或值) :正弦三角函数
cos(向量或值) :余弦三角函数
ceiling(向量名) :向上取整
floor(向量名) :向下取整
trunc(向量名) :舍去小数,取整
round(向量名) :四舍六入五留双(五留双含义整数部分为偶数留整数,奇数部分进一,例如4.5留4,5.5留6)
round(向量名,digits=数值x): round函数下保留x位小数,digits指小数点后位数
sigif(向量,digits=数值x) :截取数据,digits指有效数字的位数
下标从1开始
which.max(向量名) :返回最大元素的索引值
which.min(向量名):返回最小元素的索引值
which(t>5):返回元素值大于5的索引位置
t[which(t>5)]:返回元素值大于5的元素位置上的值