我使用 RStudio DT
获得以下代码library(shiny)
library(DT)
shinyApp(
ui = fluidPage(
DT::dataTableOutput('example')
),
server = function(input, output) {
output$example <- DT::renderDataTable({
table = cbind(LETTERS[1:5],c("9.95e-04","9.93e-06","9.93e-02","9.49e-03","9.10e-02"))
table
}, options = list(
columnDefs = list(list(type = "scientific", targets = 1))
))
}
)
但它没有按照我的意图对科学专栏进行排序。什么是正确的方法?
正确的降序应为:
V1 V2
C 0.0993
E 0.091
D 0.00949
A 0.000995
B 0.00000993
答案 0 :(得分:1)
这是我在评论部分提出的第一个解决方案的实现。
xy <- read.table(text = "V1 V2
C 0.0993
E 0.091
D 0.00949
A 0.000995
B 0.00000993", header = TRUE, colClasses = c("character", "character"))
xy$V3 <- as.numeric(xy$V2)
xy[order(xy$V3, decreasing = TRUE), c("V1", "V2")]
V1 V2
1 C 0.0993
2 E 0.091
3 D 0.00949
4 A 0.000995
5 B 0.00000993
修改的
您可以尝试使用您的示例。请注意,我使用的是data.frame。 Matrix不适合此解决方案。
output$example <- DT::renderDataTable({
xy <- data.frame(letter = LETTERS[1:5], value = c("9.95e-04","9.93e-06","9.93e-02","9.49e-03","9.10e-02"))
xy$num_val <- as.numeric(as.character(xy$value))
xy[order(xy$num_val, decreasing = TRUE), c("letter", "value")]
}
答案 1 :(得分:0)
您可以使用JavaScript进行格式化:
library(DT)
df <- data.frame(
V1 = LETTERS[1:5],
V2 = c(9.95e-04, 9.93e-06, 9.93e-02, 9.49e-03, 9.10e-02)
)
js <- c(
"function(row, data, displayNum, index){",
" var x = data[1];",
" $('td:eq(1)', row).html(x.toExponential(2));",
"}"
)
datatable(
df, rownames = FALSE,
options = list(
rowCallback = JS(js)
)
)