我有几个数据帧(大约10个),我需要将每个变量中的几个变量的摘要统计数据/频率数据放入一个漂亮的表中。我看过的所有表函数一次只允许一个数据帧的参数(据我所知)。有没有一种方法可以使我在不必合并所有数据的情况下创建该表?
答案 0 :(得分:0)
这是purrr
工作流程的示例。假设您有数据帧df1
和df2
。我们可以将它们放在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