将 facet wrap 与数据 table 对象一起使用
Use facet wrap with a data table object
我正在使用 DT 包,我想在一个数据集的单独窗格中显示两个 table。
理想情况下,我想要像 facet wrap 这样的东西,它可以让我根据计划 ID 制作 tables。我想要一个 table 包含个人计划的所有值,另一个 table 包含团队计划的所有值。我可以走很远的路,制作两个单独的数据集,但我希望我可以做一些更有效的事情
这是我的数据
structure(list(first_month = structure(c(17532, 17532, 17563,
17563, 17591, 17591, 17622, 17622, 17652, 17652), class = "Date"),
plan_id = c("personal", "team", "personal", "team", "personal",
"team", "personal", "team", "personal", "team"), new_customers = c(16,
32, 27, 33, 19, 41, 36, 46, 48, 46), `1` = c(16, 32, 27,
33, 19, 41, 36, 46, 48, 46), `2` = c(13, 29, 24, 30, 15,
37, 31, 40, 43, 38), `3` = c(13, 26, 22, 28, 14, 31, 30,
40, 36, 35), `4` = c(10, 20, 22, 22, 12, 29, 27, 39, 32,
33), `5` = c(10, 18, 20, 20, 11, 25, 22, 36, 27, 27), `6` = c(10,
16, 16, 20, 9, 24, 19, 34, 24, 25), `7` = c(10, 12, 13, 18,
7, 24, 16, 32, 21, 23), `8` = c(8, 10, 10, 14, 7, 21, 16,
30, 19, 21), `9` = c(7, 8, 7, 12, 7, 18, 16, 25, NA, NA),
`10` = c(7, 7, 5, 11, 6, 14, NA, NA, NA, NA), `11` = c(5,
6, 5, 10, NA, NA, NA, NA, NA, NA), `12` = c(5, 6, NA, NA,
NA, NA, NA, NA, NA, NA)), row.names = c(NA, -10L), class = c("tbl_df",
"tbl", "data.frame"))
这是我的代码
datatable(monthly_new_customer_cohorts_formatted_as_cohort_analysis_customer_counts,
class = 'cell-border stripe',
rownames = FALSE,
options = list(
ordering=F,
dom = 't',
pageLength = 1000))
可能不是最巧妙的答案,但希望这会有所帮助。您可以使用 group_by
、nest
、mutate
和 map2
基于 plan_id
创建单独的 data-sets,然后从每个创建单独的 DT 小部件.
library(dplyr)
library(tidyr)
library(purrr)
# Separate data for each plan_id value:
widgets <- monthly_new_customer_cohorts_formatted_as_cohort_analysis_customer_counts %>%
group_by(plan_id) %>% nest()
# For each data subset, create a separate DT widget:
widgets <- widgets %>% mutate(dt_widget = map2(.y = plan_id, .x = data, .f = function(x,y){
datatable(x,class = 'cell-border stripe',caption = y,
rownames = FALSE,options = list(
ordering=F,
dom = 't',
pageLength = 1000),
height = "100%",width = "100%")}))
widgets$dt_widget
的每个元素现在都是一个单独的 datatable
小部件。现在的技巧是将它们全部放在同一个查看器中:
library(htmltools)
browsable(x =
tagList(lapply(
widgets$dt_widget,function(x) tags$div(x)))
)
不幸的是,我不认为有一个函数可以为您提供漂亮的网格ala ggplot2::facet_wrap
(例如,9 个面的 3x3 网格),但您可以通过调整样式值来手动执行此操作 div
个元素。例如,这允许表格通过减少宽度和调整浮点数在同一行上:
browsable(
tagList(list(
tags$div(
widgets$dt_widget[[1]],
style = 'width:49%;display:block;float:left;'
),
tags$div(
widgets$dt_widget[[2]],
style = 'width:49%;display:block;float:right;')
)
))
我正在使用 DT 包,我想在一个数据集的单独窗格中显示两个 table。
理想情况下,我想要像 facet wrap 这样的东西,它可以让我根据计划 ID 制作 tables。我想要一个 table 包含个人计划的所有值,另一个 table 包含团队计划的所有值。我可以走很远的路,制作两个单独的数据集,但我希望我可以做一些更有效的事情
这是我的数据
structure(list(first_month = structure(c(17532, 17532, 17563,
17563, 17591, 17591, 17622, 17622, 17652, 17652), class = "Date"),
plan_id = c("personal", "team", "personal", "team", "personal",
"team", "personal", "team", "personal", "team"), new_customers = c(16,
32, 27, 33, 19, 41, 36, 46, 48, 46), `1` = c(16, 32, 27,
33, 19, 41, 36, 46, 48, 46), `2` = c(13, 29, 24, 30, 15,
37, 31, 40, 43, 38), `3` = c(13, 26, 22, 28, 14, 31, 30,
40, 36, 35), `4` = c(10, 20, 22, 22, 12, 29, 27, 39, 32,
33), `5` = c(10, 18, 20, 20, 11, 25, 22, 36, 27, 27), `6` = c(10,
16, 16, 20, 9, 24, 19, 34, 24, 25), `7` = c(10, 12, 13, 18,
7, 24, 16, 32, 21, 23), `8` = c(8, 10, 10, 14, 7, 21, 16,
30, 19, 21), `9` = c(7, 8, 7, 12, 7, 18, 16, 25, NA, NA),
`10` = c(7, 7, 5, 11, 6, 14, NA, NA, NA, NA), `11` = c(5,
6, 5, 10, NA, NA, NA, NA, NA, NA), `12` = c(5, 6, NA, NA,
NA, NA, NA, NA, NA, NA)), row.names = c(NA, -10L), class = c("tbl_df",
"tbl", "data.frame"))
这是我的代码
datatable(monthly_new_customer_cohorts_formatted_as_cohort_analysis_customer_counts,
class = 'cell-border stripe',
rownames = FALSE,
options = list(
ordering=F,
dom = 't',
pageLength = 1000))
可能不是最巧妙的答案,但希望这会有所帮助。您可以使用 group_by
、nest
、mutate
和 map2
基于 plan_id
创建单独的 data-sets,然后从每个创建单独的 DT 小部件.
library(dplyr)
library(tidyr)
library(purrr)
# Separate data for each plan_id value:
widgets <- monthly_new_customer_cohorts_formatted_as_cohort_analysis_customer_counts %>%
group_by(plan_id) %>% nest()
# For each data subset, create a separate DT widget:
widgets <- widgets %>% mutate(dt_widget = map2(.y = plan_id, .x = data, .f = function(x,y){
datatable(x,class = 'cell-border stripe',caption = y,
rownames = FALSE,options = list(
ordering=F,
dom = 't',
pageLength = 1000),
height = "100%",width = "100%")}))
widgets$dt_widget
的每个元素现在都是一个单独的 datatable
小部件。现在的技巧是将它们全部放在同一个查看器中:
library(htmltools)
browsable(x =
tagList(lapply(
widgets$dt_widget,function(x) tags$div(x)))
)
不幸的是,我不认为有一个函数可以为您提供漂亮的网格ala ggplot2::facet_wrap
(例如,9 个面的 3x3 网格),但您可以通过调整样式值来手动执行此操作 div
个元素。例如,这允许表格通过减少宽度和调整浮点数在同一行上:
browsable(
tagList(list(
tags$div(
widgets$dt_widget[[1]],
style = 'width:49%;display:block;float:left;'
),
tags$div(
widgets$dt_widget[[2]],
style = 'width:49%;display:block;float:right;')
)
))