假设我的数据如下所示:
df1 = data.frame(A=c(1000000.51,5000.33), B=c(0.565,0.794))
Run Code Online (Sandbox Code Playgroud)
我想使用DataTables并且列A是(1,000,001; 5,000)
library(DT)
datatable(df1) %>% formatPercentage('B', 2) %>%
formatRound('A',digits = 0)
Run Code Online (Sandbox Code Playgroud)
我知道我可以使用秤
library(scales)
comma_format()(1000000)
Run Code Online (Sandbox Code Playgroud)
但我不确定如何将其与DataTables结合起来
谢谢!
我很确定我的问题已经有了答案,但无论我搜索多么努力,我都找不到任何可以解决这个问题的解决方案.因此,如果这被认为是微不足道的,请不要拍.
现在问题在于:
假设我们使用Shiny渲染dataTable,当我将鼠标悬停在单元格上并从底层数据集动态输出时,我想获取每个单元格的id(rowID + columnID).我知道已有鼠标悬停的解决方案,例如shinyBS或此示例:
#server.R:
shinyServer(function(input, output) {
dat <- list(iris,cars)
output$tabset <- renderUI({
tabs <- list()
for(i in c(1,2)){
id <- paste("id",i, sep="")
tabs[[i]] <- tabPanel(title=id,DT::dataTableOutput(outputId=id)) #dynamic panels
}
do.call(tabsetPanel,c(tabs, id='Panel'))
})
lapply(1:2,function(i){
id <- paste("id",i, sep="")
output[[id]] <- DT::renderDataTable({
dat[[i]]},
extensions = c('Scroller'),
options=list(deferRender=TRUE, dom='T<"clear">fitrS', scrollY=540, searchHighlight = TRUE,
scrollCollapse=TRUE, autoWidth = TRUE,
columnDefs = list(list(width = '60%', targets = '_all',
render = JS("function(data, type, row, meta) {",
"return type === 'display' && data.length > 5 ?", …Run Code Online (Sandbox Code Playgroud) 我正在处理超过10万行的表并使用DT包(开发版本0.1.56)在Shiny App 中将其可视化.
此外,我使用DTExtensions作为:Buttons,以不同的格式下载数据.然而,虽然Scroller扩展也被激活,但我只能下载几行(不是所有数据).
示例代码:
library("shiny")
library("DT")
shinyApp(
ui = fluidPage(DT::dataTableOutput('tbl')),
server = function(input, output) {
output$tbl = DT::renderDataTable(
iris,extensions=c("Buttons",'Scroller'),options = list(dom = 'Bfrtip',
buttons = c('copy', 'csv', 'excel', 'pdf', 'print'),scrollY = 50,
scroller = TRUE
))
}
)
Run Code Online (Sandbox Code Playgroud)
另外如果我只运行R中的这部分代码并在查看器中获取数据表,我能够复制所有行,甚至可能如何?
library("DT")
datatable(
iris,
extensions = 'Buttons', options = list(
dom = 'Bfrtip',
buttons = c('copy', 'csv', 'excel', 'pdf', 'print')
)
)
Run Code Online (Sandbox Code Playgroud)
我尝试过不同的方法:
scrollY =在选项列表中更改... - >它正在工作,但scrollY实际显示所有数据行的数量必须很大,因此可以完全下载 …
我试图得到一个垂直卷轴,但这不起作用,任何人都可以解释为什么?我还想默认一次显示20行.
谢谢
title: "Untitled"
output:
flexdashboard::flex_dashboard:
orientation: columns
vertical_layout: fill
---
```{r setup, include=FALSE}
library(flexdashboard)
library(DT)
```
Column {data-width=650}
-----------------------------------------------------------------------
### Chart A
```{r}
datatable(cars ,options = list(c(bPaginate = F, scrollY=T)), filter = 'top')
```
Run Code Online (Sandbox Code Playgroud) 我有一个数据表,其日期列显示UTC时区.使用DT的最后一个开发版本,可以选择将日期列转换为语言环境字符串,一切都在闪亮的webapp中很好地显示.但是,如果用户将通过按钮扩展名下载表,则日期列将以UTC时区(并且格式不可读)导出
library(DT)
library(shiny)
df <- data.frame(a = 1:100, b = 1:100,
d=seq(as.POSIXct("2017-08-23 10:00:00"), as.POSIXct("2017-11-30 10:00:00"), by = "days"))
ui <- fluidPage(
dataTableOutput("table")
)
server <- function(input, output){
output$table <- DT::renderDataTable({
datatable(df,
extensions = c("Buttons"),
options = list(dom = 'Bfrtip',
buttons = list("csv",list(extend='excel',filename="DF"))
)) %>% formatDate(3, "toLocaleString", params = list('fr-FR'))
})
}
shinyApp(ui, server)
Run Code Online (Sandbox Code Playgroud)
因此,如果本地操作系统时区是+5,它将显示"23/08/2017 à 10:00:00"在一个闪亮的webapp,但"2017-08-23T05:00:00Z"在excel文件中.有什么方法可以格式化出口吗?
我目前正在尝试将 Shiny 中的数据表中的选择限制为仅两行 - 我希望该表不允许用户单击多于行(但也能够在之后取消选择它们)。
library(DT)
shinyApp(
ui = fluidPage(
fluidRow(
column(12,
dataTableOutput('table')
)
)
),
server = function(input, output) {
output$table <- DT::renderDataTable(iris,
options = list(selection = "multiple")
)
}
)
Run Code Online (Sandbox Code Playgroud)
行选择当前处于多重模式,该模式有效,但我不希望选择超过两行。
我正在使用该sparkline包生成条形图,并将其放入datatableShiny 应用程序中的单元格中。我已经设法在独立中产生所需的输出datatable,但是当我将其放入 Shiny 应用程序中时,它不起作用。spk_add_deps()这可能与如何识别 htmlwidgets有关。我尝试过spk_add_deps()多次移动该函数并向其传递各种标识符,但没有任何效果。
我确实在这里发现了本质上相同的问题Render datatable with Sparklines in Shiny
但给定的解决方案 (1) 依赖于在回调函数中为迷你图编写 JavaScript 代码(违背了使用 R 函数的目的sparkline())和 (2) 似乎如果迷你图在查看器中呈现,那么我们离让它们在 Shiny 应用程序中呈现而无需编写所有 JavaScript 就不远了。
这是演示:
# Preliminary, load packages and build a demo table with the sparkline code merged in
library(shiny)
library(DT)
library(data.table)
library(sparkline)
## Create demo data sets
my_mtcars <- data.table(mtcars, keep.rownames = TRUE)
names(my_mtcars)[1] <- 'car_id'
set.seed(0)
data_for_sparklines <- data.table(car_id = rep(my_mtcars$car_id, 5),
category = …Run Code Online (Sandbox Code Playgroud) 我想明确显示数据表Inf中的值而不是空白
iris[1, 1] <- Inf
DT::datatable(iris[1:2, ])
Run Code Online (Sandbox Code Playgroud)
我不想转动列信息字符以便能够对列进行排序(如果我这样做,排序将按字母顺序排列)
有任何想法吗?
编辑:
我认为可以采用这种代码:
datatable(iris[c(1:20), ], options = list(columnDefs = list(list(
targets = 5,
render = JS(
"function(data, type, row, meta) {",
"return type === 'display' && data.length > 2 ?",
"'<span title=\"' + data + '\">' + data.substr(0, 2) + '...</span>' : data;",
"}")
))))
Run Code Online (Sandbox Code Playgroud)
使用@MLavoie解决方案,它没有区别NA并且Inf
df = iris
df[1,1]<-Inf
df[2,1]<-NA
DT::datatable(df)
library(DT)
DT::datatable(df[,], options = list(columnDefs = list(list(
targets = 1,
render = JS(
"function(data, …Run Code Online (Sandbox Code Playgroud) DT::datatable我正在尝试在 bookdown 项目中创建一个引用。
书籍手册规定(\#tab:label)应将其放置在表格标题的开头。_output.yml为了进行测试,我在 R-studio 中创建了一个新的 bookdown 项目,但用以下配置替换了内容html_book(我只对 HTML 输出感兴趣)。
bookdown::html_book:
toc: yes
theme: null
highlight: pygments
split_by: none
Run Code Online (Sandbox Code Playgroud)
然后我在 的底部添加了以下代码01-intro.Rmd。
```{r irisTab}
DT::datatable(iris, caption = '(\\#tab:irisTab) Iris table')
```
See Table \@ref(tab:irisTab).
Run Code Online (Sandbox Code Playgroud)
我的期望是,它将(\\#tab:irisTab)被替换Table 2.2或至少被替换2.2,并且下面的参考将是2.2。然而,这是行不通的。标签保持逐字不变,参考文献为??。
我能得到的最接近的结果是将标题文本放在表格之前。
Table (\#tab:irisTab): Iris table
```{r irisTab}
DT::datatable(iris)
```
See Table \@ref(tab:irisTab).
Run Code Online (Sandbox Code Playgroud)
在这种情况下,引用有效,但标签(\#tab:irisTab)在输出中仍然逐字保留,即它没有按2.2预期替换。
有没有办法创建一个带有标题并且可以引用的DT表?
更新 1:@mikey-harper 建议使用fig.cap. 但是,fig.cap仅更新 …
我想创建一个具有以下流程的应用程序:
DTDT,它对 #2 中创建的可编辑 DataTable 中的更改做出反应(在下面的示例中,只需将数字列乘以 2)这是执行 #1 和 #2 的示例。但是,#3 不起作用,因为通常通过可编辑公开的信息DT不会出现在 my 中input,可能是由于某些范围或渲染顺序问题。
library(shiny)
library(DT)
library(dplyr)
ui <- fluidPage(
sidebarLayout(
sidebarPanel =
sidebarPanel(
selectInput("cars", "Pick a vehicle", rownames(mtcars), multiple = T),
actionButton("add", "Create Tabs")
),
mainPanel =
mainPanel(
tabsetPanel(
id = "panel"
)
)
)
)
server <- function(input, output, session) {
df <- tibble::rownames_to_column(mtcars, "car")
data <- reactiveVal()
observe({
req(df, input$cars)
# Step 1) split data by …Run Code Online (Sandbox Code Playgroud) dt ×10
r ×8
shiny ×7
bookdown ×1
datatable ×1
format ×1
htmlwidgets ×1
javascript ×1
knitr ×1
r-markdown ×1
reactive ×1
sparklines ×1