首页 > 解决方案 > R中的formattable可以按变量对表进行分组吗?

问题描述

是否可以使用按数据框中的变量之一分组的 formattable 生成表格?可以将表格划分/拆分/分组为连续打印的单独表格,或者将分组分隔在一个表格中。

如果 formattable 无法实现,那么可以推荐哪些其他包和功能来根据所描述的需求创建漂亮的表格?

在此数据框的示例中:

df <- tibble( 
     x = c(1:100),
     y = c("email","postal")[rep(c(1,2), times=50)],
     c = rep(c("cat1","cat2","cat3","cat4"), times=25) )

我希望 formattable 为“x”和“y”两列的变量 c 中的每个 cat1 到 cat4 生成 4 个表,或者为每个 cat1 到 cat4 生成 1 个包含 4 个部分的表。

希望任何人都可以提供帮助。

在第一次回复/评论后添加:更具体地说,如何使用 formattable 一次性将 tab1 转换为 tab4,最好使用 c 作为每个表之间的标签?

library(formattable)
tab1 <- subset(df, c == "cat1")
tab2 <- subset(df, c == "cat2")
tab3 <- subset(df, c == "cat3")
tab4 <- subset(df, c == "cat4")
formattable( tab1  , list(c = FALSE ))
formattable( tab2  , list(c = FALSE ))
formattable( tab3  , list(c = FALSE ))
formattable( tab4  , list(c = FALSE ))

第三次编辑:我可能难以描述最终的需求。@ricoderks 的建议几乎把我带到了那里.. 它一口气完成了,但最后一件事是我希望所有这些表都显示在一个视图/文件/输出/面板中,而不是像 @ricoderks 代码那样显示四个。这意味着我只想要一个表格输出,该表格输出在变量 c 的这 4 个组中进行排序和划分,可以使用 formattable 或其他类似的功能/工具。我一直在从你的提示中学习,但仍然不是我想要的。再次非常感谢您的努力。

外观示例

标签: rsplitgroup-byformattable

解决方案


使用dplyr,您可以基于组拆分数据框并获取带有分隔数据框的列表:

library(dplyr)
list <- df %>% group_split(c)
names(list) <- unique(df$c)

这里的格式是list

> list
$cat1
# A tibble: 25 x 3
       x y     c    
   <int> <chr> <chr>
 1     1 email cat1 
 2     5 email cat1 
 3     9 email cat1 
 4    13 email cat1 
 5    17 email cat1 
 6    21 email cat1 
 7    25 email cat1 
 8    29 email cat1 
 9    33 email cat1 
10    37 email cat1 
# … with 15 more rows

$cat2
# A tibble: 25 x 3
       x y      c    
   <int> <chr>  <chr>
 1     2 postal cat2 
 2     6 postal cat2 
 3    10 postal cat2 
 4    14 postal cat2 
 5    18 postal cat2 
 6    22 postal cat2 
 7    26 postal cat2 
 8    30 postal cat2 
 9    34 postal cat2 
10    38 postal cat2 
# … with 15 more rows

$cat3
# A tibble: 25 x 3
       x y     c    
   <int> <chr> <chr>
 1     3 email cat3 
 2     7 email cat3 
 3    11 email cat3 
 4    15 email cat3 
 5    19 email cat3 
 6    23 email cat3 
 7    27 email cat3 
 8    31 email cat3 
 9    35 email cat3 
10    39 email cat3 
# … with 15 more rows

$cat4
# A tibble: 25 x 3
       x y      c    
   <int> <chr>  <chr>
 1     4 postal cat4 
 2     8 postal cat4 
 3    12 postal cat4 
 4    16 postal cat4 
 5    20 postal cat4 
 6    24 postal cat4 
 7    28 postal cat4 
 8    32 postal cat4 
 9    36 postal cat4 
10    40 postal cat4 
# … with 15 more rows

attr(,"ptype")
# A tibble: 0 x 3
# … with 3 variables: x <int>, y <chr>, c <chr>

是你要找的吗?


推荐阅读