你的位置:首页 > 数据库

[数据库]R(五): R常用函数


    工作笔记记录,会持续更新....

目录:

  • apply
  • tapply
  • lapply
  • sapply
  • merge

apply函数:


  • apply:apply的中文意思是应用,这个函数的意思是通过将一个函数应用到矩阵或数组中,返回一个向量或数组
  • 语法:apply(X, MARGIN, FUN, ...)  , 其中X为一个数组;MARGIN为一个向量(表示要将函数FUN应用到X的行还是列),1:表示取行,2:表示取列,c(1,2)表示行、列都计算。
  • 示例:
    > ma <- matrix(c(1:4, 1, 6:8), nrow = 2);ma   [,1] [,2] [,3] [,4][1,]  1  3  1  7[2,]  2  4  6  8> apply(ma, 1, sum)[1] 12 20> apply(ma, 2, sum)[1] 3 7 7 15

    View Code

tapply:


  • tapply:是对向量中的数据进行分组处理,而非对整体数据进行处理
  • 语法: tapply(X, INDEX, FUN = NULL, ..., simplify = TRUE),
    1. 其中X通常是一向量;
    2. INDEX是一个list对象,且该list中的每一个元素都是与X有同样长度的因子;
    3. FUN是需要计算的函数;
    4. simplify是逻辑变量,TRUE(默认值),且函数FUN的计算结果总是为一个标量值,那么函数tapply返回一个数组;若取值为FALSE,则函数tapply的返回值为一个list对象。需要注意的是,当第二个参数INDEX不是因子时,函数 tapply() 同样有效,因为必要时 R 会用 as.factor()把参数强制转换成因子
  • 示例:
    > da  year province sale1 2007    A  12 2007    B  23 2007    C  34 2007    D  45 2008    A  56 2008    C  67 2008    D  78 2009    B  89 2009    C  910 2009    D  10> attach(da)> tapply(sale,list(year,province),mean)     A B C D2007 1 2 3 42008 5 NA 6 72009 NA 8 9 10

    View Code

lapply:


  • lapply: (list apply)针对list的apply函数
  • 语法: lapply(X, FUN, ...)   lapply的返回值是和一个和X有相同的长度的list对象,这个list对象中的每个元素是将函数FUN应用到X的每一个元素
  • 示例:
    #外卖示例数据s<-data.frame(shop_id=c('001','002'),saled=c(35,78),       takeout_cost=c(30,60),delivery_time=c(10,20))lapply(s,function(x){ if(is.numeric(x)){  mean(x) } else{  length(x) }})

    View Code
  • 结果:$shop_id [1] 2 $saled [1] 56.5 $takeout_cost [1] 45 $delivery_time [1] 15

sapply:


  • sapply:sapply函数和Lapply函数类似,也是对List进行处理,只是在返回结果上,sapply会根据结果的数据类型和结构,重新构建一个合理的数据类型返回
  • 语法:sapply(X, FUN,..., simplify = TRUE, USE.NAMES = TRUE)
  • 示例:如上例,调用sapply函数返回结果为:
    shop_id   saled takeout_cost delivery_time 2.0     56.5     45.0     15.0

merge:


  • merge: merge是R语言中用来合并数据框的函数
  • 语法:merge(x, y, by = intersect(names(x), names(y)),  by.x = by, by.y = by, all = FALSE, all.x = all, all.y = all,  sort = TRUE, suffixes = c(".x",".y"), incomparables = NULL, ...)
    1. x,y:用于合并的两个数据框
    2. by.x,by.y:指定依据哪些行合并数据框,默认值为相同列名的列.
    3. all.x,all.y:指定x和y的行是否应该全在输出文件
    4. sort:by指定的列是否要排序
    5. suffixes:指定除by外相同列名的后缀
    6. incomparables:指定by中哪些单元不进行合并
  • 示例代码:
    #数据:w1:NAME  SCHOOL  CLASS  ENGLISHA  S1  10  85B  S2  5  50A  S1  4  90A  S1  11  90C  S1  1  12w2:NAME  SCHOOL  CLASS  MATHS  ENGLISHA  S3  5  80  88B  S2  5  89  81C  S1  1  55  32merge(w1, w2, all = T) NAME SCHOOL CLASS ENGLISH MATHS1  A   S1   4   90  NA2  A   S1  10   85  NA3  A   S1  11   90  NA4  A   S3   5   88  805  B   S2   5   50  NA6  B   S2   5   81  897  C   S1   1   12  NA8  C   S1   1   32  55merge(w1, w2, by = c("NAME", "SCHOOL", "CLASS"), all = T) NAME SCHOOL CLASS ENGLISH.x MATHS ENGLISH.y1  A   S1   4    90  NA    NA2  A   S1  10    85  NA    NA3  A   S1  11    90  NA    NA4  A   S3   5    NA  80    885  B   S2   5    50  89    816  C   S1   1    12  55    32

    View Code
  •