• ggplot2(9) 数据操作


    9.1 plyr包简介

    ddply {plyr}: Split data frame, apply function, and return results in a data frame.

    ddply(.data, .variables, .fun = NULL, ..., .progress = "none", .inform = FALSE, .drop = TRUE, .parallel = FALSE, .paropts = NULL)

    • .data:用来作图的数据。
    • .variables:对数据取子集的分组变量,形式是 .(var1, var2) ,为了与图形保持一致,该变量必须包含所有在画图过程中用到的分组变量和分面变量。
    • .fun:要在各个子集上运行的统计汇总函数。
    • .inform:产生信息丰富的错误消息?这在默认情况下是关闭的,因为它大大降低了处理速度,但是对于调试非常有用。
    # 选取各个颜色里最小的钻石
    ddply(diamonds, .(color), subset, carat == min(carat))
    # 选取最小的两颗钻石
    ddply(diamonds, .(color), subset, order(carat) <= 2)
    # 选取每组里大小为前1%的钻石
    ddply(diamonds, .(color), subset, carat > quantile(carat, 0.99))
    # 选出所有比组平均值大的钻石
    ddply(diamonds, .(color), subset, price > mean(price))

    transform {base}: Transform an Object, for Example a Data Frame.

    transform(`_data`, ...)

    transform()是进行数据变换的函数,与ddply()结合可以计算分组统计量。

    # 把每个颜色组里钻石的价格标准化,使其均值为0,方差为1
    ddply(diamonds, .(color), transform, price = scale(price))

    colwise {plyr}: Column-wise function.

    colwise用来向量化一个函数,能把原本只接受向量输入的函数变成可以接受数据框输入的函数。

    要注意colwise返回的是一个新的函数,而不是函数运行的结果。

    下面例子中nmissing()计算向量里缺失值的数目,用colwise()向量化后,可以应用到数据框,计算数据框中各列的缺失值数目。

    nmissing <- function(x) sum(is.na(x))
    
    nmissing_df <- colwise(nmissing)
    nmissing_df(msleep)
    
    # This is shorthand for the previous two steps
    colwise(nmissing)(msleep)

     

    numcolwise()和catcolwise()是colwise()的特殊版本,功能类似,但numcolwise()只对数值类型的列操作,catcolwise()只对分类类型的列操作。

    我们也可以编写编写的函数,只要他能够接受、输出数据框就可以。下面的例子计算价格和克拉的秩相关关系。

    my_summary <- function(df) {
        with(df, data.frame(pc_cor = cor(price, carat, method = "spearman"), lpc_cor = cor(log(price), 
            log(carat))))
    }
    ddply(diamonds, .(cut), my_summary)
    
    ddply(diamonds, .(color), my_summary)

    拟合多个模型:

    dense <- subset(diamonds, carat < 2)
    qplot(carat, price, data = dense, geom = "smooth", colour = color, fullrange = TRUE)

    library(mgcv)
    library(plyr)
    smooth <- function(df) {
        mod <- gam(price ~ s(carat, bs = "cs"), data = df)
        grid <- data.frame(carat = seq(0.2, 2, length = 50))
        pred <- predict(mod, grid, se = T)
        grid$price <- pred$fit
        grid$se <- pred$se.fit
        grid
    }
    smoothes <- ddply(dense, .(color), smooth)
    qplot(carat, price, data = smoothes, colour = color, geom = "line")
    qplot(carat, price, data = smoothes, colour = color, geom = "smooth", ymax = price + 
        2 * se, ymin = price - 2 * se)

    9.2 数据化“宽”为“长”

    melt {reshape2}: Convert an object into a molten data frame.

    melt(data, ..., na.rm = FALSE, value.name = "value")

    • data:待变形的原数据;
    • id.vars:依旧放在列上、位置保持不变的变量;
    • measure.vars:需要被放进同一列的变量。

    示例:

    https://www.cnblogs.com/dingdangsunny/p/12482067.html#_label3

    多重时间序列:

    emp <- melt(economics, id = "date", measure = c("unemploy", "uempmed"))
    qplot(date, value, data = emp, geom = "line") + facet_grid(variable ~ ., scales = "free_y")

    ggplot2不允许绘制带有两个不同坐标轴的图,因为这样的图具有误导性。可以使用自由标度的分面图形表达有量级差的变量。

    总结

  • 相关阅读:
    大型web系统数据缓存设计
    配置AndroidStudio
    android-studio 安装gradle
    Gradle的简介与安装
    史上最详细的Android Studio系列教程四--Gradle基础
    Android SDK
    如何让猎头找到你
    android-volley-manager
    Android Studio导入Project的方法
    设置Android Studio启动时可选最近打开过的工程
  • 原文地址:https://www.cnblogs.com/dingdangsunny/p/12489105.html
Copyright © 2020-2023  润新知