2017-06-22 14 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)を置き換える方法があるかどうかについての詳細。代わりに、私は、各カテゴリの観測の数をマージされたセルの列の各カテゴリを決定し、インデックスを持つベクトルを構築する関数を書く必要があります。 borderの位置を決定する方法で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

関連する問題