2017-06-22 41 views
0

當您合併單元格時,是否有一種智能的方法讓水平邊框表格變寬? (在下面的例子中,它還沒有寬度)。R flextable - 如何在合併的單元格下添加一個表格寬的水平邊框

或者我應該寫一個函數來計算正確的索引?

library(flextable) 
library(officer) 
library(dplyr) 

myft <- flextable(head(mtcars), 
        col_keys = c("am", "carb", "gear", "mpg", "drat"))%>% 
    theme_vanilla()%>% 
    merge_v(j = c("am"))%>%border(border.bottom = fp_border(style = "solid", width=2), i=c(3,6), part="body") 

myft 
+0

你在說這個問題嗎? https://github.com/davidgohel/flextable/issues/6 –

+0

不是。更多關於是否以更通用的方式替換i = c(3,6)的方法。或者,我必須編寫一個函數來爲合併單元格中的每個類別確定每個類別中觀察值的數量,並構建一個帶有索引的向量。能夠以確定邊界位置的方式使用merge_v會很好。 – Lod

+0

不錯的建議。我會爲此提供一個功能。 –

回答

0

這裏是你想要的代碼。它需要更多的工作纔是通用的 - 僅當第1列是唯一已合併單元格時才適用此示例。

library(flextable) 
library(officer) 
library(dplyr) 

bigborder <- fp_border(style = "solid", width=2) 
myft <- flextable(head(mtcars), 
        col_keys = c("am", "carb", "gear", "mpg", "drat"))%>% 
    theme_vanilla()%>% 
    merge_v(j = c("am")) 

# here starts the trick 
row_loc <- rle(cumsum(myft$body$spans$columns[,1]))$values 
myft <- myft %>% 
    border(border.bottom = bigborder, i=row_loc, j = 2:5, part="body") 
myft <- myft %>% 
    border(border.bottom = bigborder, 
     i = myft$body$spans$columns[,1] > 1, j = 1, part="body") %>% 


    border(border.bottom = bigborder, border.top = bigborder, part = "header") 
myft 
+0

不錯的使用rle – Lod

相關問題