Pivot Table-like Output in R?

后端 未结 4 485
慢半拍i
慢半拍i 2021-01-31 22:16

I am writing a report that requires the generation of a number of pivot tables in Excel. I would like to think there is a way to do this in R so that I can avoid Excel. I would

4条回答
  •  你的背包
    2021-01-31 22:43

    Below are several different ways of generating this using the relatively new pivottabler package.

    Disclosure: I'm the package author.

    For more information see the package page on CRAN and the various package vignettes available on that page.

    Sample Data (same as above)

    set.seed(1)
    school  <- sample(c("BSA1", "BSA2", "HSA1"), 100, replace=T)
    teacher <- sample(c("Tom", "Dick", "Harry"), 100, replace=T)
    growth <- rnorm(100, 5, 3)
    myDf <- data.frame(school, teacher, growth)
    

    Quick pivot table output to console as plain text

    library(pivottabler)
    # arguments:  qhpvt(dataFrame, rows, columns, calculations, ...)
    qpvt(myDf, c("school", "teacher"), NULL,  
         c("Average Growth"="mean(growth)", "Std Dev"="sd(growth)",
           "# of Scholars"="n()"),
         formats=list("%.1f", "%.1f", "%.0f"))
    

    Console Output:

                  Average Growth  Std Dev  # of Scholars  
    BSA1   Dick              4.7      3.7             14  
           Harry             4.3      1.4              9  
           Tom               5.5      4.0              4  
           Total             4.7      3.1             27  
    BSA2   Dick              6.1      2.3             15  
           Harry             5.0      2.9              9  
           Tom               4.3      2.8             14  
           Total             5.2      2.7             38  
    HSA1   Dick              4.5      2.9             11  
           Harry             4.9      3.0             13  
           Tom               4.7      3.2             11  
           Total             4.7      3.0             35  
    Total                    4.9      2.9            100  
    

    Quick pivot table output as a html widget

    library(pivottabler)
    qhpvt(myDf, c("school", "teacher"), NULL,  
         c("Average Growth"="mean(growth)", "Std Dev"="sd(growth)",
           "# of Scholars"="n()"),
         formats=list("%.1f", "%.1f", "%.0f"))
    

    HTML Widget Output:

    Generating pivot table using more verbose syntax

    This has more options, e.g. renaming totals.

    library(pivottabler)
    pt <- PivotTable$new()
    pt$addData(myDf)
    pt$addRowDataGroups("school", totalCaption="(all)")
    pt$addRowDataGroups("teacher", totalCaption="(all)")
    pt$defineCalculation(calculationName="c1", caption="Average Growth", 
       summariseExpression="mean(growth)", format="%.1f")
    pt$defineCalculation(calculationName="c2", caption="Std Dev", 
       summariseExpression="sd(growth)", format="%.1f")
    pt$defineCalculation(calculationName="c3", caption="# of Scholars", 
       summariseExpression="n()", format="%.0f")
    pt  # to output to console as plain text
    pt$renderPivot() # to output as a html widget
    

    HTML Widget Output:

提交回复
热议问题