2017-03-25 50 views
0
library(htmlTable) 
library(tidyverse) 
library(ggmosaic) for "happy" dataset 

我想創建一個函數,爲數據集中的所有分類變量創建頻率表,然後爲每個分類生成html表格。但是,通過使用purrr :: map,表格在列表中。我如何使用htmlTable生成表格?或者更好的包生成類似的表發佈?我想我需要拆分列表或使用額外的purrr :: map函數?幫助將不勝感激......使用Purrr生成多個html表格的函數:: map

Something like this... 


FUN<-function(data){ 
TAB<-happy%>%select_if(is.factor)%>% 
map(table) 
TABLES<-htmlTable(TAB) 
return(TABLES) 
} 

回答

0

下面是一個使用tibble存儲函數的自變量以及所產生的HTML字符串的解決方案:

編輯:添加新列(百分比)

library(ggmosaic) 
library(purrr) 
library(tidyverse) 
library(htmlTable) 
library(magrittr) 
library(scales) 

data(happy) 

# Use a subset of `happy` for the example 
h <- happy %>% as_tibble %>% sample_n(100) 

# create the function 
make_html_table <- function(data, .name, .col_names) { 
    data %>% 
    table %>% 
    as.data.frame %>% 
    set_colnames(.col_names) %>% 
    as.data.frame %>% 
    mutate(percent = scales::percent(count/sum(count))) %>% # add the percent column 
    htmlTable(caption = .name) 
} 

# Apply the function and store the results in a tibble 
tbl <- 
    h %>% 
    select_if(is.factor) %>% 
    { tibble(NAME = names(.), 
      data = map(., ~.x)) } %>% 
    mutate(TABLE = map2(.x = data, 
         .y = NAME, 
         .f = make_html_table, 
         .col_names = c("levels", "count"))) 

# Check out the tables in the Viewer Pane (if you're using RStudio) 
tbl %>% extract2("TABLE") %>% map(htmlTableWidget) 
#> $happy 
#> 
#> $sex 
#> 
#> $marital 
#> 
#> $degree 
#> 
#> $finrela 
#> 
#> $health 

下面是這個創建表的一個截圖:

html table

+0

謝謝,這是我想要的,但只是幾件事情。一,我似乎沒有htmlTableWidget?我試着做tbl%>%extract2%>%(「TABLE」)%>%map(htmlTable),它只顯示健康的html表,這是最後一個列表。另外,我可以使用tidyr :: unnest而不是extract2嗎? – Mike

+0

對於「在Tibble中存儲結果」部分,此代碼中{}的用途是什麼?我沒有試過,它說「每個變量必須是1d原子向量或列表」。我不確定那是什麼意思? – Mike

+0

最後,有沒有辦法將百分比添加到make_html_table函數中?同時擁有計數和百分比列是非常棒的。百分比是我所追求的!我還發布了另一個關於這個問題的問題太大聲笑 – Mike