2017-10-26 7 views
1

頻度、累積頻度、列の割合、累積列のパーセンテージの列を持つ書式設定されたhtmlテーブルを作成しようとしています。テーブルには、グループ化変数によってサブセット化され、グループ合計を含むデータも必要です。R個の "テーブル"パッケージを使用した累積カウント/パーセンテージとグループ合計を持つ美しいテーブル

私はこれをdplyrとtidyrの組み合わせでほぼ達成できますが、出力はそれほど美しく見えないデータフレームです。 tables::tabulateコマンドを使用すると簡単な方法があるのだろうか?

# Sample data 
dat <- data.frame(
    id = 1:100, 
    group = factor(sample(c("A", "B"), 100, replace = TRUE)), 
    sessions = factor(sample(1:10, 100, replace = TRUE)) 
) 

# dplyr/tidyr solution 
library(dplyr) 
library(tidyr) 
dat %>% 
    group_by(group, sessions) %>% 
    tally() %>% 
    spread(key = group, value = n) %>% 
    mutate(All = rowSums(.[-1])) %>% 
    gather(key = group, value = n, -sessions) %>% 
    group_by(group) %>% 
    mutate(
    cum_n = cumsum(n), 
    p = round(n/sum(n)*100,1), 
    cum_p = round(cum_n/sum(n)*100,1), 
) %>% 
    data.frame() %>% 
    reshape(timevar = "group", idvar = "sessions", direction = "wide") 

# As far as I get using tables::tabulate 
library(tables) 
tabular(
    Factor(sessions, "Sessions") ~ 
    (Heading()*group + 1) * 
    (
     (n = 1) + 
     # (cum_n = ??) + 
     Heading("%")*Percent(denom = "col")*Format(digits = 2) 
     # + Heading("cum_%")*??*Format(digits = 2) 
    ), 
    data = dat 
) 
+1

何をしようとする私には明らかではないが、あなたが必要なすべてのデータを持つ単純なdata.frameを作成することができれば、あなたはその後、HTMLテーブルに変換し可能性があり[tableHTML](https://cran.r-project.org/web/packages/tableHTML/vignettes/tableHTML.html)を使って好きなCSSを使ってください。 – LyzandeR

+0

@LyzandeRありがとうございます。私はあなたのリンクが非常にうまく立証しているネスト/マージされた列見出しを特に見ていたと思います。 – JWilliman

+0

パーフェクト、私は助けることができてうれしいよ:) – LyzandeR

答えて

2

私は、knitr::kablekableExtraを使用してテーブルを生成するための素晴らしいパッケージをお勧めします。たとえば、同じコードを使用してhtmllatexpdfに作成するなど、複数のフォーマット出力用に設定することもできます。

library(dplyr) 
library(tidyr) 
library(knitr) 
library(kableExtra) 

dat %>% 
    group_by(group, sessions) %>% 
    tally() %>% 
    spread(key = group, value = n) %>% 
    mutate(All = rowSums(.[-1])) %>% 
    gather(key = group, value = n, -sessions) %>% 
    group_by(group) %>% 
    mutate(
    cum_n = cumsum(n), 
    p = round(n/sum(n)*100,1), 
    cum_p = round(cum_n/sum(n)*100,1), 
) %>% 
    data.frame() %>% 
    reshape(timevar = "group", idvar = "sessions", direction = "wide") %>% 
    kable("html") %>% 
    kable_styling(bootstrap_options = c("striped", "hover")) 

enter image description here

+0

これらのパッケージの優れた機能に私を変更していただきありがとうございます。テーブルパッケージについて気に入った点の1つは、列見出しの入れ子でした。データがdata.frameとして表示される場合、これが可能であるかどうかはわかりません。ああ、ちょうどこれを行う方法が[vingettes](https://cran.r-project.org/web/packages/kableExtra/vignettes/awesome_table_in_html.html)を見つけました! – JWilliman

関連する問題