r - flextable 按列分组
问题描述
我正在通过 Rmarkdown 生成需要能够呈现到 Word 的报告。我希望能够重现这种表格格式:
我曾尝试flextable
在没有任何实际进展的情况下做到这一点。我已经通读了该flextable
站点,并找到了一种使用组来合并行而不是对列进行分组的方法。as_grouped_data() 函数可以预先创建组,但我可以将这些组用于列标题吗?
我的数据的小例子:
df = structure(list(Athlete = structure(c(1L, 1L, 1L, 2L, 2L, 2L,
1L, 1L, 1L, 2L, 2L, 2L), .Label = c("Athlete 1", "Athlete 2"), class = "factor"),
Time = structure(c(1L, 2L, 3L, 1L, 2L, 3L, 1L, 2L, 3L, 1L,
2L, 3L), .Label = c("1", "2", "3"), class = "factor"), Measure = structure(c(1L,
1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L), .Label = c("Distance",
"Speed"), class = "factor"), Value = c(4.02, 11.5, 19.82,
3.03, 9.67, 17.9, 6.5, 8.08, 8.47, 5.3, 7.64, 8.67)), row.names = c(NA,
-12L), class = "data.frame")
# Create table
myft = flextable(df)
# Merge athlete coloumn
myft = merge_v(myft, j=c("Time", "Athlete"))
myft
我被困在这里,不确定如何将这些组从行标题旋转到列标题。
解决方案
要为表格创建所需的格式,您可能需要“宽”数据。这将为您的 2 位运动员提供 2 列。此示例使用pivot_wider
from tidyr
。
按Time
顺序排列后,您使用merge_v
from flextable
。添加fix_border_issues
以在合并后修复底部表格边框。
library(flextable)
library(tidyverse)
myft <- df %>%
pivot_wider(id_cols = c(Time, Measure), names_from = Athlete, values_from = Value) %>%
arrange(Time) %>%
flextable()
# Merge Time column vertically
myft = merge_v(myft, j="Time")
myft = fix_border_issues(myft, part = "all")
myft
输出
推荐阅读
- javascript - 翻转精灵/敌人 p5.js JavaScipt
- firebase - 如何将 Firebase 与 Nativescript-Vue 结合使用?
- java - Selenium JavascriptExecutor - document.readyState 处的脚本超时
- python - 如何在 Tensorflow 2.0 中打印 tensorflow.python.framework.ops.Tensor 的值?
- c# - 如何从数据库统一检索用户名然后添加自动登录
- windows - 如何对 .exe 文件使用 askopenfilename?
- c# - 如何使用 Microsoft.Office.Interop.Word 将 byte[] 从 dtb 转换为文档
- mysql - 如何使用新值更改/更新图像路径的起始字符
- bigdata - 使 Glue 在作业后删除源数据
- php - 使用 mPDF 将 PhpSpreadsheet xlsx 转换为 PDF -> 我无法删除网格线并显示表格边框