读书笔记之 数据框操作与常用函数

来源:互联网 发布:根域名中国镜像服务器 编辑:程序博客网 时间:2024/06/08 05:47

如何把列表转化为整齐的矩阵?

mylist<-as.list(iris[,1:4])result<-sapply(mylist,mean)result<-lapply(mylist,mean)#结果1】Sepal.Length  Sepal.Width Petal.Length  Petal.Width     5.843333     3.057333     3.758000     1.1993332】 $Sepal.Length[1] 5.843333$Sepal.Width[1] 3.057333$Petal.Length[1] 3.758$Petal.Width[1] 1.199333

由上可以发现两个的输出类型是不一样的。【1】是向量,【2】是list.

将list转化为matrix的操作:

#第一种是先转成数据框,再转置t(as.data.frame(result))class(A)[1] "matrix"#第二种是使用取子集的二元操作符作为sapply的参数t(sapply(result,'['))#将result传入rbinddo.call('rbind',result)class(C)[1] "matrix"

常用的函数:

1.tapply()用法:

tapply(X, INDEX, FUN = NULL, ..., default = NA, simplify = TRUE#INDEX 为因子(分类变量)

例:

tapply(X=iris$Sepal.Length,INDEX=list(iris$Species),FUN=mean)#结果setosa versicolor  virginica      5.006      5.936      6.588 

2.类似的函aggregate()

aggregate(x, by, FUN, ..., simplify = TRUE, drop = TRUE)#x为数据框

例子用这两个函数简写就是:

with(iris,tapply(Sepal.Length,list(Species),mean))with(iris,aggregate(Sepal.Length,by=list(Species),mean))#仅输出数据结构不一样,aggregate更加友好,为数据框

3.mapply()函数

mapply(FUN, ..., MoreArgs = NULL, SIMPLIFY = TRUE,USE.NAMES = TRUE)#两个参数都要变化,可以用它

例:

 mapply(rep, 1:4, 4:1)[[1]][1] 1 1 1 1[[2]][1] 2 2 2[[3]][1] 3 3[[4]][1] 4

4.outer()函数,类似矩阵计算中的外积,直接对两个数相乘

outer(X, Y, FUN = "*", ...)*函数可以自定义例:outer(month.abb, 1999:2003, FUN = "paste") [,1]       [,2]       [,3]       [,4]       [,5]       [1,] "Jan 1999" "Jan 2000" "Jan 2001" "Jan 2002" "Jan 2003" [2,] "Feb 1999" "Feb 2000" "Feb 2001" "Feb 2002" "Feb 2003" [3,] "Mar 1999" "Mar 2000" "Mar 2001" "Mar 2002" "Mar 2003" [4,] "Apr 1999" "Apr 2000" "Apr 2001" "Apr 2002" "Apr 2003" [5,] "May 1999" "May 2000" "May 2001" "May 2002" "May 2003" [6,] "Jun 1999" "Jun 2000" "Jun 2001" "Jun 2002" "Jun 2003" [7,] "Jul 1999" "Jul 2000" "Jul 2001" "Jul 2002" "Jul 2003" [8,] "Aug 1999" "Aug 2000" "Aug 2001" "Aug 2002" "Aug 2003" [9,] "Sep 1999" "Sep 2000" "Sep 2001" "Sep 2002" "Sep 2003"[10,] "Oct 1999" "Oct 2000" "Oct 2001" "Oct 2002" "Oct 2003"[11,] "Nov 1999" "Nov 2000" "Nov 2001" "Nov 2002" "Nov 2003"[12,] "Dec 1999" "Dec 2000" "Dec 2001" "Dec 2002" "Dec 2003"#例如用其生成九九乘法表f<-function(x,y){    left<-paste0(x,"*",y,"=")    right<-x*y    re<-paste0(left,right)    return(re)}vec1<-vec2<-vecouter(vec1,vec2,FUN=f)#结果    [,1]    [,2]     [,3]     [,4]     [,5]     [,6]     [,7]     [,8]     [,9]     [1,] "1*1=1" "1*2=2"  "1*3=3"  "1*4=4"  "1*5=5"  "1*6=6"  "1*7=7"  "1*8=8"  "1*9=9"  [2,] "2*1=2" "2*2=4"  "2*3=6"  "2*4=8"  "2*5=10" "2*6=12" "2*7=14" "2*8=16" "2*9=18" [3,] "3*1=3" "3*2=6"  "3*3=9"  "3*4=12" "3*5=15" "3*6=18" "3*7=21" "3*8=24" "3*9=27" [4,] "4*1=4" "4*2=8"  "4*3=12" "4*4=16" "4*5=20" "4*6=24" "4*7=28" "4*8=32" "4*9=36" [5,] "5*1=5" "5*2=10" "5*3=15" "5*4=20" "5*5=25" "5*6=30" "5*7=35" "5*8=40" "5*9=45" [6,] "6*1=6" "6*2=12" "6*3=18" "6*4=24" "6*5=30" "6*6=36" "6*7=42" "6*8=48" "6*9=54" [7,] "7*1=7" "7*2=14" "7*3=21" "7*4=28" "7*5=35" "7*6=42" "7*7=49" "7*8=56" "7*9=63" [8,] "8*1=8" "8*2=16" "8*3=24" "8*4=32" "8*5=40" "8*6=48" "8*7=56" "8*8=64" "8*9=72" [9,] "9*1=9" "9*2=18" "9*3=27" "9*4=36" "9*5=45" "9*6=54" "9*7=63" "9*8=72" "9*9=81"

outer()在3d作图中的应用。

f<-function(x,y,z) x^2-10*cos(2*pi*x)+y^2+10*cos(2*pi*y)+20x<-y<-seq(-5,5,0.01)z<-outer(x,y,f)image(x,y,z)Z<-rank(z)library(rgl)bg3d("slategray")#设置背景色persp3d(x,y,z,col=rainbow(as.integer(max(Z)))[Z])play3d(spin3d())
原创粉丝点击