R 使用flextable对表格部分进行分类并突出显示

R 使用flextable对表格部分进行分类并突出显示,r,dataframe,formatting,flextable,officer,R,Dataframe,Formatting,Flextable,Officer,下面是按列类别分类的dataframe > dput(mydata) structure(list(Category = c("Executive", "Management", "Management", "Management", "Professional", "Professional", "Professional", "Para-Professional", "Para-Professional", "Para-Professional" ), Rank = c("Rank

下面是按列类别分类的dataframe

> dput(mydata)
structure(list(Category = c("Executive", "Management", "Management", 
"Management", "Professional", "Professional", "Professional", 
"Para-Professional", "Para-Professional", "Para-Professional"
), Rank = c("Rank 1", "Rank 1", "Rank 2", "Rank 3", "Rank 1", 
"Rank 2", "Rank 3", "Rank 1", "Rank 2", "Rank 3"), Jobs = c(" SMP - Sales, Marketing & Product Management", 
" SMP - Sales, Marketing & Product Management", " ENS - Engineering & Science", 
" FIN - Finance", " SMP - Sales, Marketing & Product Management", 
" ENS - Engineering & Science", " FIN - Finance", " PSK - Production & Skilled Trades", 
" ENS - Engineering & Science", " EGS - Energy Generation & Supply"
), N = c(3, 10, 3, 2, 54, 25, 5, 7, 2, 1)), row.names = c(NA, 
-10L), class = "data.frame")
我想将相同类别的单元格合并到category列中,这是使用flex table对下面代码所做的

mydata%>% flextable()%>% merge_v(j=~Category)
现在我想突出显示每个类别对应的数据的整个部分边框,例如,对于其他类别,对应于高管类别的数据应该以更宽的边框突出显示。我尝试过,但只能突出显示类别单元格,如下所示:

cl<-fp_border(color = "#00A8C8",width = 3)
mydata%>% flextable()%>% merge_v(j=~Category)%>%hline(j=~Category,border = cl)
cl%flextable()%%>%merge_v(j=~Category)%%>%hline(j=~Category,border=cl)

我希望与每个类别对应的所有子表周围都有类似的边框,以便更好地区分表中的类别。如何仅使用flextable就可以做到这一点?

我认为这应该会有所帮助

这里的关键是找到一种方法来创建一个逻辑向量,表示行应该出现的位置-这就是函数
break\u position
所做的

library(flextable)
library(officer)
library(magrittr)
mydata <- structure(list(Category = c(
  "Executive", "Management", "Management",
  "Management", "Professional", "Professional", "Professional",
  "Para-Professional", "Para-Professional", "Para-Professional"
), Rank = c(
  "Rank 1", "Rank 1", "Rank 2", "Rank 3", "Rank 1",
  "Rank 2", "Rank 3", "Rank 1", "Rank 2", "Rank 3"
), Jobs = c(
  " SMP - Sales, Marketing & Product Management",
  " SMP - Sales, Marketing & Product Management", " ENS - Engineering & Science",
  " FIN - Finance", " SMP - Sales, Marketing & Product Management",
  " ENS - Engineering & Science", " FIN - Finance", " PSK - Production & Skilled Trades",
  " ENS - Engineering & Science", " EGS - Energy Generation & Supply"
), N = c(3, 10, 3, 2, 54, 25, 5, 7, 2, 1)), row.names = c(
  NA,
  -10L
), class = "data.frame")


cl <- fp_border(color = "#00A8C8", width = 3)

break_position <- function(x) {
  z <- data.table::rleidv(x)
  c(z[-length(z)] != z[-1], FALSE)
}

mydata %>%
  flextable() %>%
  merge_v(j = ~Category) %>%
  hline(i = ~ break_position(Category), border = cl) %>% 
  fix_border_issues()
库(flextable)
图书馆(主任)
图书馆(magrittr)
mydata%
修复边界问题()

我认为这应该会有所帮助

这里的关键是找到一种方法来创建一个逻辑向量,表示行应该出现的位置-这就是函数
break\u position
所做的

library(flextable)
library(officer)
library(magrittr)
mydata <- structure(list(Category = c(
  "Executive", "Management", "Management",
  "Management", "Professional", "Professional", "Professional",
  "Para-Professional", "Para-Professional", "Para-Professional"
), Rank = c(
  "Rank 1", "Rank 1", "Rank 2", "Rank 3", "Rank 1",
  "Rank 2", "Rank 3", "Rank 1", "Rank 2", "Rank 3"
), Jobs = c(
  " SMP - Sales, Marketing & Product Management",
  " SMP - Sales, Marketing & Product Management", " ENS - Engineering & Science",
  " FIN - Finance", " SMP - Sales, Marketing & Product Management",
  " ENS - Engineering & Science", " FIN - Finance", " PSK - Production & Skilled Trades",
  " ENS - Engineering & Science", " EGS - Energy Generation & Supply"
), N = c(3, 10, 3, 2, 54, 25, 5, 7, 2, 1)), row.names = c(
  NA,
  -10L
), class = "data.frame")


cl <- fp_border(color = "#00A8C8", width = 3)

break_position <- function(x) {
  z <- data.table::rleidv(x)
  c(z[-length(z)] != z[-1], FALSE)
}

mydata %>%
  flextable() %>%
  merge_v(j = ~Category) %>%
  hline(i = ~ break_position(Category), border = cl) %>% 
  fix_border_issues()
库(flextable)
图书馆(主任)
图书馆(magrittr)
mydata%
修复边界问题()