簡體   English   中英

在 R 中為summary_table() 的輸入創建帶有匯總統計信息的列表列表

[英]Creating list of lists with summary statistics for input to summary_table() in R

我正在按照此處列出的說明創建一個干凈的匯總統計表。

在這些說明中,summary_table() function 的輸入是列表列表,如下所示:

our_summary1 <-
  list("Miles Per Gallon" =
   list("min" = ~ min(.data$mpg),
        "max" = ~ max(.data$mpg),
        "mean (sd)" = ~ qwraps2::mean_sd(.data$mpg)),
   "Displacement" =
   list("min" = ~ min(.data$disp),
        "median" = ~ median(.data$disp),
        "max" = ~ max(.data$disp),
        "mean (sd)" = ~ qwraps2::mean_sd(.data$disp)),
   "Weight (1000 lbs)" =
   list("min" = ~ min(.data$wt),
        "max" = ~ max(.data$wt),
        "mean (sd)" = ~ qwraps2::mean_sd(.data$wt)),
   "Forward Gears" =
   list("Three" = ~ qwraps2::n_perc0(.data$gear == 3),
        "Four"  = ~ qwraps2::n_perc0(.data$gear == 4),
        "Five"  = ~ qwraps2::n_perc0(.data$gear == 5))
   )

我的數據集中有 48 個變量,每個變量都有自己的列。 有沒有一種更簡潔的方法可以讓我循環瀏覽我的 dataframe 中的所有列以創建像上面那樣的 object 而無需像這樣手動輸入? 理想情況下,我更喜歡使用 tidyverse 的解決方案。

我正在考慮做的一件事是將我的數據更改為長格式,然后使用 group_by() 按原始數據中的每一列進行分組,然后使用 summarise()。 但是,我的理解是,這將產生一個列表,而不是像 summary_table() 所必需的列表列表。

如果創建匯總表的方式與我在這里嘗試的方式完全不同,請告訴我。 這個看起來是我正在考慮的最整潔的選項。 對於每個變量,我希望能夠重命名它並包括最小值、最大值、平均值和標准差。

如您所述,您可以將數據轉換為更長的格式並使用summarize() 訣竅是在每個匯總中創建一個列表列:

library(dplyr)
library(tidyr)

summarized <- mtcars %>%
  pivot_longer(cols = c(mpg, wt, disp)) %>%
  group_by(name) %>%
  summarize(lst = list(list(mean = mean(value),
                            max = max(value),
                            min = min(value),
                            sd = sd(value))))

summarized
#> # A tibble: 3 x 2
#>   name  lst             
#> * <chr> <list>          
#> 1 disp  <named list [4]>
#> 2 mpg   <named list [4]>
#> 3 wt    <named list [4]>

然后可以使用來自 tibble package 的deframe()將其轉換為列表列表。

library(tibble)
result <- deframe(summarized)

str(result)
#> List of 3
#>  $ disp:List of 4
#>   ..$ mean: num 231
#>   ..$ max : num 472
#>   ..$ min : num 71.1
#>   ..$ sd  : num 124
#>  $ mpg :List of 4
#>   ..$ mean: num 20.1
#>   ..$ max : num 33.9
#>   ..$ min : num 10.4
#>   ..$ sd  : num 6.03
#>  $ wt  :List of 4
#>   ..$ mean: num 3.22
#>   ..$ max : num 5.42
#>   ..$ min : num 1.51
#>   ..$ sd  : num 0.978

David 的不錯的解決方案(贊成),因為我使用 lapply 快速輸入了一個簡單的解決方案:這里供您使用:

library(magrittr)
library(qwraps2)
df = data.frame(matrix(rnorm(40), nrow=10))
df

xlist <- function(x)
  { list(
  "min" = min(x),
  "max" = max(x),
  "mean (sd)" = mean_sd(x))}

attach(df)
Smry <- lapply(1:4,FUN=xlist)
Smry

只需按照您喜歡的方式格式化列表 output,在 function 中 - 這里的關鍵是 1)制作 function 和 2)使用 lapp

暫無
暫無

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

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