R DT数据表格式数字按行与formatRound

y4ekin9u  于 12个月前  发布在  其他
关注(0)|答案(1)|浏览(80)

我面临着以下问题:我想在一个闪亮的应用程序与R包DT格式化数据表。我想在第一行数字四舍五入到0位,并在其他行2位数字

data <- data.frame(c1 = c(123.456, 789.123, 456.55),
c2 = c(123.456, 789.123, 456.55))
# this does not work
datatable(data) %>% formatRound(1:2, digits=0, rows=1) %>% formatRound(1:2, digits=2, rows=1:2)
# this also does not work
datatable(data) %>% formatRound(1:2,digits=c(0,2,2))

字符串
你能帮助我吗?有可能实现吗?我想可能用一些JS应该是可能的,但我是JS新手。
感谢各位的指导。

7cjasjjr

7cjasjjr1#

虽然对于大型数据集不是那么有效,但如果数据集不是很大(否则生成输出可能会很慢),您可以尝试:

library(DT)

data <- data.frame(c1 = c(123.456, 789.123, 456.55),
                   c2 = c(123.456, 789.123, 456.55))

formatRows <- function(df) {
    for (i in 1:nrow(df)) {
        if (i == 1) {
            df[i, 1:2] <- round(df[i, 1:2], 0)
        } else {
            df[i, 1:2] <- round(df[i, 1:2], 2)
        }
    }
    return(df)
}

#apply the func
formattedData <- formatRows(data)

#convert into a datatable
datatable(formattedData)

字符串
结果:


的数据
和闪亮的应用程序,可能是这样的:

library(shiny)
library(DT)

formatRows <- function(df) {
    for (i in 1:nrow(df)) {
        if (i == 1) {
            df[i, 1:2] <- round(df[i, 1:2], 0)
        } else {
            df[i, 1:2] <- round(df[i, 1:2], 2)
        }
    }
    return(df)
}

ui <- fluidPage(
    dataTableOutput("mytable")
)

server <- function(input, output) {
    data <- data.frame(
        c1 = c(123.456, 789.123, 456.55),
        c2 = c(123.456, 789.123, 456.55)
    )

    formattedData <- formatRows(data)

    output$mytable <- renderDataTable({
        datatable(formattedData)
    })
}

shinyApp(ui, server)

相关问题