【问题标题】:R: How to apply a function to a data frame to make plots of each subset with a unique factor combinationR:如何将函数应用于数据框以制作具有唯一因子组合的每个子集的图
【发布时间】:2017-04-27 13:18:53
【问题描述】:

我想了解如何使用 apply 函数或任何类似函数来绘制数据框的多个子集的图。假设我想使用 mtcars 数据框,并且我想为“gear”和“carb”的每个组合绘制一个图。

我读到here,可以只编写一个函数,然后使用 lapply 创建数据框的子集并为每个子集绘制图。那么我如何重写它以使用 lapply 或类似的东西?

gg_test = function(data) {
    title = paste("gear",data[,"gear"][1],"carb",data[,"carb"][1])

    require(ggplot2)
    gg1 = ggplot(data, aes(x = mpg, y = cyl, color = disp)) + geom_point() +
        ggtitle(title)
    print(gg1)
} 

for (g in unique(mtcars[,"gear"])){
    for(ca in unique(mtcars[,"carb"])){
        df_sub = subset(mtcars, gear == g & carb == ca)
        gg_test(df_sub)
    }
}

【问题讨论】:

    标签: r function loops plot apply


    【解决方案1】:

    您可以使用 splitinteraction 将 data.frame 划分为块,然后您可以将绘图功能应用于:

    gg_test = function(data) {
      title = paste("gear",data[,"gear"][1],"carb",data[,"carb"][1])
    
      require(ggplot2)
      ggplot(data, aes(x = mpg, y = cyl, color = disp)) + geom_point() +
        ggtitle(title)
    } 
    

    我修改了您的绘图函数以返回绘图而不是打印出来。

    plots <- lapply(split(mtcars, interaction(mtcars[,c("gear","carb")]), drop = TRUE), gg_test)
    

    然后我将每个图存储在另一个可以按需打印的对象中。

    【讨论】:

    • 谢谢。谢谢。效果很好! :-)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-04-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多