[英]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.