简体   繁体   English

R 中缺少弹性表的外边框

[英]Missing outer border of a flextable in R

I have an issue I can't resolve.我有一个无法解决的问题。 There may be something missing in the flextable package, but I may be wrong. flextable package 中可能缺少某些内容,但我可能错了。 Please, see the example.请看例子。 This is my tabular data:这是我的表格数据:

structure(list(groupName = c("Group A", "Group A", "Group A", 
"Group A", "Group A", "Group B", "Group B", "Group B", "Group B", 
"Group B"), ID = c("14243", "14363", "14373", "14934", "14980", 
"14400", "14488", "14513", "14549", "15407"), `Day -15` = c(NA, 
NA, NA, 174, 143, NA, NA, NA, NA, 169), `Day -13` = c(NA, NA, 
NA, 164, 132, NA, NA, NA, NA, 178), `Day -12` = c(NA_real_, NA_real_, 
NA_real_, NA_real_, NA_real_, NA_real_, NA_real_, NA_real_, NA_real_, 
NA_real_), `Day -11` = c(NA, NA, NA, NA, 189, NA, 213, NA, NA, 
204), `Day -10` = c(NA, NA, NA, 187, NA, NA, NA, NA, NA, NA), 
    `Day -9` = c(NA, NA, NA, NA, 178, NA, 204, 227, 257, 232), 
    `Day -8` = c(NA, NA, NA, 286, NA, NA, NA, NA, NA, NA), `Day -7` = c(NA, 
    NA, NA, NA, NA, NA, 258, 311, 291, NA)), row.names = c(NA, 
-10L), class = c("tbl_df", "tbl", "data.frame"))

I build a flextable like this:我建立一个这样的弹性表:

flx <- flextable(tbl2) %>% 
  border_outer() %>% 
  add_header_row(values = c(
    "groupName",
    "ID",
    rep("measurement", ncol(tbl2) - 2)
  )) %>% 
  merge_h(part = "header") %>% 
  merge_v(part = "header") %>% 
  valign(valign = "bottom", part = "header") %>% 
  align(align = "center", part = "all")

and the output is output 是在此处输入图像描述 As You can see there is missing border in the first row of the header.如您所见,header 的第一行缺少边框。 I tried to add border_outer() once again, but no effect.我尝试再次添加border_outer() ,但没有效果。 I also tried vline_right function, but no effect too.我也试过vline_right function,但也没有效果。 The only thing I found was to add this step:我发现的唯一一件事是添加这一步:

flx %>% border_inner_v(part = "header")

but it adds border to every cell in the header which is not what I need.但它为 header 中的每个单元格添加了边框,这不是我需要的。 在此处输入图像描述

I think the step merge_h in my pipeline is the place where bad things happen.我认为我的管道中的步骤merge_h是发生坏事的地方。 Is there a solution for this?有解决方案吗?

This is a special case, the border you are seeing on the right side is actually the right border of the third cell that has been merged with all following cells.这是一种特殊情况,您在右侧看到的边框实际上是已与所有后续单元格合并的第三个单元格的右边框。

library(flextable)
library(magrittr)

tbl2 <- structure(list(groupName = c("Group A", "Group A", "Group A", 
"Group A", "Group A", "Group B", "Group B", "Group B", "Group B", 
"Group B"), ID = c("14243", "14363", "14373", "14934", "14980", 
"14400", "14488", "14513", "14549", "15407"), `Day -15` = c(NA, 
NA, NA, 174, 143, NA, NA, NA, NA, 169), `Day -13` = c(NA, NA, 
NA, 164, 132, NA, NA, NA, NA, 178), `Day -12` = c(NA_real_, NA_real_, 
NA_real_, NA_real_, NA_real_, NA_real_, NA_real_, NA_real_, NA_real_, 
NA_real_), `Day -11` = c(NA, NA, NA, NA, 189, NA, 213, NA, NA, 
204), `Day -10` = c(NA, NA, NA, 187, NA, NA, NA, NA, NA, NA), 
`Day -9` = c(NA, NA, NA, NA, 178, NA, 204, 227, 257, 232), 
`Day -8` = c(NA, NA, NA, 286, NA, NA, NA, NA, NA, NA), `Day -7` = c(NA, 
NA, NA, NA, NA, NA, 258, 311, 291, NA)), row.names = c(NA, -10L), 
class = c("tbl_df", "tbl", "data.frame"))

# solution 1
flextable(tbl2) %>% 
  border_outer() %>% 
  add_header_row(values = c(
    "groupName",
    "ID",
    rep("measurement", ncol(tbl2) - 2)
  )) %>% 
  merge_h(part = "header") %>% 
  merge_v(part = "header") %>% 
  valign(valign = "bottom", part = "header") %>% 
  align(align = "center", part = "all") %>% 
  vline(i = 1, j = 3, border = fp_border_default(), part = "header")

# solution 2
flextable(tbl2) %>% 
  border_outer() %>% 
  add_header_row(values = c(
    "groupName",
    "ID",
    rep("measurement", ncol(tbl2) - 2)
  )) %>% 
  merge_h(part = "header") %>% 
  merge_v(part = "header") %>% 
  valign(valign = "bottom", part = "header") %>% 
  align(align = "center", part = "all") %>% 
  fix_border_issues()

在此处输入图像描述

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM