美文网首页
ggplot2回顾(13): 使用plyr包整理数据

ggplot2回顾(13): 使用plyr包整理数据

作者: TOP生物信息 | 来源:发表于2019-12-08 20:35 被阅读0次
    library(plyr) #比较旧的一个包, 主要用到ddply()这个函数
    

    ddply(.data, .variables, .fun = NULL)

    • .variables: variables to split data frame by
    • .fun: function to apply to each piece

    下面对.fun参数展开讲

    1. subset() 取子集

    在各个分组中找出carat的最值,将原纪录输出(即还是保持原有数据框的格式)

    ddply(diamonds,.(color),subset,carat==min(carat))
    ddply(diamonds,.(color),subset,carat==max(carat))
    

    原书第一版此处用order取carat最小的两个值有误!

    在各个分组中找出carat在前0.1%(最重的那一批)的记录

    ddply(diamonds,.(color),subset,carat > quantile(carat,0.999))
    

    在各个分组中找出price大于均值的记录

    ddply(diamonds,.(color),subset,price > mean(price))
    
    2. transform() 数据变换
    ddply(diamonds,.(color),transform,price = scale(price))
    ddply(diamonds,.(color),transform,price = price-mean(price))
    

    归一化函数

    range01 <- function(v) {
      rng <- range(v,na.rm = T)
      (v-rng[1]) / diff(rng)
    }
    ddply(diamonds,.(color),transform,price = range01(price))
    
    3. colwise() 使函数向量化

    使能接受向量的函数也能接受数据框

    > nmissing <- function(x) sum(is.na(x))
    > nmissing(msleep$name)
    [1] 0
    > nmissing(msleep$brainwt)
    [1] 27
    > nmissing_df <- colwise(nmissing)
    > nmissing_df(msleep)
      name genus vore order conservation sleep_total sleep_rem sleep_cycle awake brainwt bodywt
    1    0     0    7     0           29           0        22          51     0      27      0
    

    简单用法
    colwise(nmissing)(msleep)
    类似的:numcolwise(median)(msleep,na.rm=T)、catcolwise()分别只对数值型和分类型操作
    与ddply联用

    > ddply(msleep,.(vore),numcolwise(median),na.rm=T)
         vore sleep_total sleep_rem sleep_cycle awake  brainwt bodywt
    1   carni        10.4      1.95   0.3833333  13.6 0.044500 20.490
    2   herbi        10.3      0.95   0.2166667  13.7 0.012285  1.225
    3 insecti        18.1      3.00   0.1666667   5.9 0.001200  0.075
    4    omni         9.9      1.85   0.5000000  14.1 0.006600  0.950
    5    <NA>        10.6      2.00   0.1833333  13.4 0.003000  0.122
    
    4. 自己写一个函数,满足输入输出为数据框即可
    my_summary <- function(df) {
      with(df,data.frame(
        pc_cor=cor(price,carat,method = "spearman"),
        lpc_cor=cor(log(price),log(carat))
      ))
    }
    
    > ddply(diamonds,.(color),my_summary)
      color    pc_cor   lpc_cor
    1     D 0.9561208 0.9606617
    2     E 0.9600994 0.9643845
    3     F 0.9641572 0.9623876
    4     G 0.9633681 0.9696785
    5     H 0.9730390 0.9801569
    6     I 0.9834392 0.9865118
    7     J 0.9846710 0.9879449
    

    结果自动包含分组变量color,且放在第一列。

    这一节中,有两个函数值得借鉴:2中的归一化函数、4中的求相关系数的函数。

    相关文章

      网友评论

          本文标题:ggplot2回顾(13): 使用plyr包整理数据

          本文链接:https://www.haomeiwen.com/subject/zwxvgctx.html