簡體   English   中英

在 R 中重新創建 Excel 數據透視表 - 表格或 qpvt

[英]Recreating Excel pivot tables in R - tabular or qpvt

這是患者數據的示例數據集(實際數據有約 26k 行)。

library(pivottabler)
library(tables)
library(tidyverse)

df <- tribble(
  ~Patient, ~Physician, ~Specialty, ~Duration, ~CostWeight,
  1, "A", "Family Medicine", 5, 1.4215,
  2, "A", "Family Medicine", 7, 1.6463,
  3, "B", "Pediatrics", 1, 1.0214,
  4, "B", "Pediatrics", 3, 1.2345,
  5, "B", "Pediatrics", 6, 6.3243, 
  6, "C", "Neurology", 10, 2.5104,
  7, "D", "Dermatology", 0, 1.0424,
  8, "E", "Family Medicine", 2, 1.5234
)

數據圖片。

基本上,我正在嘗試在 R 中重新創建 Excel 數據透視表,因為這將每月使用不同的數據集進行,並且只需插入文件並運行代碼以獲取數據透視表而不是這樣做會很棒用手。

我想要一張看起來像這樣的桌子。

所需特性:

  • 需要每個專業分組的總行
  • 需要總計行
  • 可以使用kable() /kableExtra 包自定義的表

嘗試 1

我試過使用這個例子

tabular(Specialty * (Physician + 1) + 1 ~
          (
            (Count = Patient) +
            (avgDuration = mean(Duration)) +
            (avgCostWeight = mean(CostWeight))
          ), 
        data = df)

但是,我不斷收到錯誤消息說

term2table(rows[[i]], cols[[j]], data, n) 中的錯誤:重復值:Specialty and Physician”。

嘗試 2

我也嘗試過使用這個 post使用 pivottabler 包。

pt <- df %>%
  qpvt(c("Specialty", "Physician"), NULL, c("Discharges" = "n()", 
                                            "avgDuration" = "mean(Duration)", 
                                            "avgCostWeight" = "mean(CostWeight)")
       )

pt$evaluatePivot()
df <- pt$asDataFrame()

df %>%
  kbl()

然而,輸出並不理想,因為它將 Specialty 和 Physician 列連接成一個

有人有任何線索嗎?

您應該查看庫DT以獲取要使用的長期工具,只需使用幾行代碼我就能夠構建您正在尋找的最小示例,您可能需要先安裝它。

library(DT)
library(tidyverse)

df <- tribble(
  ~Patient, ~Physician, ~Specialty, ~Duration, ~CostWeight,
  1, "A", "Family Medicine", 5, 1.4215,
  2, "A", "Family Medicine", 7, 1.6463,
  3, "B", "Pediatrics", 1, 1.0214,
  4, "B", "Pediatrics", 3, 1.2345,
  5, "B", "Pediatrics", 6, 6.3243, 
  6, "C", "Neurology", 10, 2.5104,
  7, "D", "Dermatology", 0, 1.0424,
  8, "E", "Family Medicine", 2, 1.5234
)

#getting count
df %>% 
  group_by(Specialty) %>% 
  count()

#creating table
datatable(df_grouped, filter = 'top', options = list(
  pageLength = 5, autoWidth = TRUE
))

計數過濾器像在您的數據透視表中一樣獲取計數,然后 DT 表是動態的並且能夠過濾

在此處輸入圖片說明 在此處輸入圖片說明

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM