【R语言学习笔记】初识(四)


首先在写R-FAQ之前插播一下看到建立矩阵的几个方法:


比如我输入:


a<-matrix(1:20,nrow=4,byrow=T)


rownames(a)=LETTERS[1:4]


colnames(a)=letters[5:9]


则出来一个矩阵




这是最常规的方法,同时还有第二种方法:




第二种设立矩阵的方法
其中先设置一个向量,然后定义向量的维度(dim),维度是行、列顺序


最后,还有第三种方法




第三种矩阵设立方法
其中cbing和rbind为把向量/矩阵按照行列方式叠加


下面继续R-FAQ


【53】对数列进行变换


这里用到aperm函数,这个函数感觉比较绕


首先建立一个数列




数列a
这里的数列a是1:24整数,按照2行3列四组的形式排列


然后如果我要变换数列,就用到了aperm这个函数


aperm说的是对a这个数列进行变换,这个函数的含义是以前是(2,3,4),也就是行列组三个顺序,现在变换,是对行列组三个进行变换,所以既然是行列组,只有三个数,也就是aperm后面的参数是123三个数的不断排列组合。







按照1,2,3排列组合,就是没有变换顺序,b=a




按照3,2,1组合,也就是之前的2行3列4组,变成了4行3列2组


所以扩展下,aperm函数貌似只能变换(本来就是变换函数。。。),这个变换是内部的行列组之间的变换,如果我对原来a这个数列,234不满意,想形成622,6行2列2组的话,可以使用dim函数,即




变换组
【54】删除list中的元素


其实比较重要的就是索引,比如案例中的lst,利用lst[['a']]['b']索引到list中alist的b,然后赋值为NULL,就可以删除,亲测在array中无法使用该语句。同时利用$的索引也可以,比如lst$a$b语句达到同样效果


【55】行、列累加


利用cumsum函数;


这个号函数的逻辑如果是一个向量,则针对这个向量进行累计,如vec<-c(1,2,3,4,5),cumsum(vec)返回的是(1,1+2,1+2+3,1+2+3+4,1+2+3+4+5)


如果是一个矩阵,利用apply函数做计算,如


apply(matrix,y,cumsum)其中,y如果是1,就是对行加和,如果是2,就对列加和。


比如我定义一个矩阵,mat2,




想要对这个矩阵每个元素加2,则直接


apply(mat2,1,'+',2)


最后相当于转置了矩阵


而如果是apply(mat2,2,'+',2)的话,直接对每一列都加2形成




同时,也可以设置不同的Function,比如之前说的cumsum,即


apply(mat2,2,cumsum)


【56】向量极值


首先get到一个新函数是rev,就是转置函数,x<-rev(y)也就是翻转


pmax和pmin函数,求的是在相同向量个数中的极大值们和极小值们


如x<-1:10,y<-rev(x),pmax会返回十个最大值,pmin同理


【59】分组数据的统计,?apply函数


apply族的函数比较复杂, 在这里进行分类和说明一下。


在前面说过apply函数,矩阵行业转置的原因可能是在输入公式之后,由于只是对行进行运算,最后行程三个数列:a[1],a[2],a[3],举个例子





对于矩阵a,做apply(a,1,'*',2)相当于按行的每个元素均*2


最后也就是形成三个数列:a[1],a[2],a[3],a[1]]2,4,6,8以此类推;由于R的矩阵排列方式是按照列排列,很有可能最后行程三列矩阵,a1a2a3


同理,如果是apply(a,2,'*',2),就是按列相乘,就不会出现这个情况。


一般的加减乘除相当于矩阵相乘,也就是矩阵中的行列每个元素都要相乘,最后出来的还是矩阵样式,但是如果是sum这类函数,最后出来的是一个数字,也就不是矩阵了


【关于tapply】


tapply和apply函数比较类似,比如我假设一个向量m<-1:4,n<-c('e','e','f','g'),如果单纯的利用tapply的话,如tapply(m,n),相当于直接阐述n,也就是回到(1,1,2,3);


如果fun加载其他函数,如tapply(m,n,sum)则返回首列为n,对应的数值按照赋值加和的方式展示,如




其中e被赋值1,2,f=3 g=4,tapply求和对相同的数据求和(相当于excel数据透视表功能)


当然sum还可以扩展成mean,sd等函数


R-FAQ的例子其实就是赋值,简单点说,tapply针对向量,就是前一个给后一个赋值,然后对后一个进行处理的过程

你可能感兴趣的:(R)