使用多个数据框在R中创建一个漂亮的表

时间:2018-07-26 21:34:41

标签: r html-table

我有几个数据帧(大约10个),我需要将每个变量中的几个变量的摘要统计数据/频率数据放入一个漂亮的表中。我看过的所有表函数一次只允许一个数据帧的参数(据我所知)。有没有一种方法可以使我在不必合并所有数据的情况下创建该表?

1 个答案:

答案 0 :(得分:0)

这是purrr工作流程的示例。假设您有数据帧df1df2。我们可以将它们放在tibble中,并使用map将函数应用于每个数据框。它们甚至不需要相同的尺寸。

library(tidyverse)
#> Warning: package 'dplyr' was built under R version 3.5.1

# Generate data -----------------------------------------------------------
N1 <- 20
df1 <- matrix(as.integer(runif(N1^2, 1, 500)), nrow = N1, ncol = N1) %>% 
  as.tibble()
df1
#> # A tibble: 20 x 20
#>       V1    V2    V3    V4    V5    V6    V7    V8    V9   V10   V11   V12
#>    <int> <int> <int> <int> <int> <int> <int> <int> <int> <int> <int> <int>
#>  1   388   210   290    35   327    25   182   402   342   139   278   210
#>  2    46   328   451   147   465   474   190   379   353   324   490   478
#>  3    76   243   376    68    18    33   278    38   413    96   409   367
#>  4    58   321   188   403   251    79   102   199    94   373   118   251
#>  5   118   201   451    26   122   389   397   332   274   399   300   374
#>  6   295   247   121   385   373    94   369   248   372   363   138   339
#>  7   250   101   363   125    43   441   135   292   250   129   144   301
#>  8   202   119   212    70   278   253   348   364   184   374   246   455
#>  9   105   295   436     4   109   367   202     3   275   262   187   309
#> 10   291    51   151   150   164   450   299   396   231     2   156   440
#> 11    36   303   426    51   380   257    77   456   383   203   498   385
#> 12   181   290   191   305   222   441   184   290   193   321    74   231
#> 13   338    64   183   360    32   386   197    64   358    63   349   139
#> 14    21   236   234   190    40   150   212   177   214    19   309   423
#> 15   212   394   251   314   162   338   388   275   337   260   377   390
#> 16   333   310     4    65   200    99   449    71   368   407   197    41
#> 17   474   276   212    89   416   212   379   126   184   284   155   337
#> 18    48   295   188   449   436   152   427   136    62    92   339    87
#> 19    73   169   168   359   315   117   358    94    78   191   424   175
#> 20   308    17   399   262   143   487    97   146     5   324    72   347
#> # ... with 8 more variables: V13 <int>, V14 <int>, V15 <int>, V16 <int>,
#> #   V17 <int>, V18 <int>, V19 <int>, V20 <int>

N2 <- 10
df2 <- matrix(as.integer(runif(N2^2, 500, 1000)), nrow = N2, ncol = N2) %>% 
  as.tibble()

df2
#> # A tibble: 10 x 10
#>       V1    V2    V3    V4    V5    V6    V7    V8    V9   V10
#>    <int> <int> <int> <int> <int> <int> <int> <int> <int> <int>
#>  1   853   840   517   950   534   557   957   508   508   895
#>  2   793   959   761   601   941   740   957   774   857   690
#>  3   511   557   762   951   806   503   605   650   800   518
#>  4   529   587   640   831   502   751   968   875   506   668
#>  5   578   700   777   763   662   795   580   583   899   920
#>  6   873   948   606   867   518   748   777   587   756   676
#>  7   671   748   991   616   678   985   580   578   784   957
#>  8   660   785   842   683   750   563   696   798   785   900
#>  9   520   991   758   993   504   800   670   588   712   980
#> 10   683   780   628   733   974   998   570   669   922   680


# Put into tibble and apply functions -------------------------------------

results <- tibble(df = list(df1,df2)) %>% 
  mutate(avg_by_column = map(.x = df, .f = function(df){
   df %>% 
      summarize_all(mean)
  })) %>% 
  mutate(max = map_dbl(df, max))
results
#> # A tibble: 2 x 3
#>   df                 avg_by_column       max
#>   <list>             <list>            <dbl>
#> 1 <tibble [20 × 20]> <tibble [1 × 20]>   498
#> 2 <tibble [10 × 10]> <tibble [1 × 10]>   998