2015-10-16 16 views
5

biçimlendirme ben DT -package kullanarak datatable görüntüleyen parlak-uygulamam var. İstediğim, sütunları özel bir şekilde biçimlendirebilmek. Örneğin, şu şekilde görüntülenecek bir para birimi değeri istiyorum: DT yerine 1,234,50 €, bu da 1,234,5 dolar gibi görünür (semboldeki değişikliği, para birimi sembolünün konumunu ve ayrıca ondalık nokta).DT Shiny ve R: Özel sayı

Bir MWE şuna benzer: para birimi-sembolü değiştirirken

library(shiny) 
library(DT) 

shinyApp(
    # UI 
    ui = fluidPage(DT::dataTableOutput('tbl')), 

    # SERVER 
    server = function(input, output) { 
    dat <- data.frame(cur = 1234.5, # supposed to be displayed as: 1,234.50€ | Bad! 
             # displayed as $1,234.5 
         perc = 0.123456, # 12.34% | Good! 
         num = 1000) # 1,000 | Bad! displayed as 1000 

    # render DT 
    output$tbl = DT::renderDataTable(
     datatable(dat) %>% 
     formatCurrency(c('cur'), "$") %>% 
     formatPercentage('perc', 2) %>% 
     formatRound('num', digits = 0) 
    ) 
    } 
) 

Oldukça iyi bir iş, ancak, sembol kaybolur gelmez. "E" gibi başka bir karakter eklerken, karakter hala başında değil başında görüntülenir. Ayrıca, sayısal değer bir "büyük işareti" almaz.

Herhangi bir fikrin var mı?

+2

: 'FormatCurrency ('num', para birimi = "", aralık = 3, mark = "" basamak = 0)'. Euro için, formatCurrency (c ('cur'), ​​para birimi = "€", aralık = 3, işaret = ",", rakam = 1). – Chris

+0

Sağlamak için emin değilim ama 1000 formatındaki 'formatCurrency'-yaklaşımı iyidir! Bununla birlikte, hala para birimi numarası için bir işareti görmüyorum. Ben de '\ U20AC' '' formatCurrency' – David

cevap

2

Sen Datatable paketinden .js dosyasındaki para sembolünün pozisyonunu değiştirebilir.

Düzenleme DTWidget.formatCurrency fonksiyonunun çizgisi DT sizin R librarys Dizine/htmlwidgets/datatables.js dosya içinde

$(thiz.api().cell(row, col).node()).html(currency + markInterval(d, interval, mark)); 

basitçe

$(thiz.api().cell(row, col).node()).html(markInterval(d, interval, mark) + currency); 

. € Sembol gelince

,
formatCurrency(c('cur'), currency = "\U20AC", interval = 3, mark = ",", digits = 2) 

, benim için çalışır denediğinizi ve herhangi bir sembol görmüyorum thats ne? deneyebilirsin sayısal İçin

+0

İlginç bir yaklaşım önerilen 'yerine' kullanırsanız, aynı geçerlidir. Aynı sonuçları almak istiyorsam kütüphane yönünü diğer makinelere kopyalamak zorunda mıyım? – David

+1

Evet, bu kütüphaneyi her makineye bağlamak zorunda kalacaksınız, bir sunucuda sadece kurs kütüphanesi üzerinde çalışmalısınız. Ayrıca her DT paket güncellemesinden sonra kodu ayarlamanız gerekecektir. Yani bu biraz gimmiky, bunu almak için çok kolay olduğu gibi para birimi sembolünü düzenlemek için r kodu bir seçeneği uygulamak için https://github.com/rstudio/DT üzerinde geliştirme ekibine önerebilirsiniz. Bir sonraki güncellemeden alındı. ikinci çözelti ile ilgili olarak – Sebastian

+1

: I 'yazarken shinyApp (ui = fluidPage (DT :: dataTableOutput ('sofra kaşığı')), sunucusu = fonksiyonu (giriş, çıkış) {dat <- data.frame (fark = 1234.5) çıkış $ tbl = DT :: renderDataTable ( veritable (dat)%>% formatCurrency (c ('cur'), ​​currency = "\ U20AC", interval = 3, işareti = ",", digit = 2) ) } ) 'ı' digits' hala para birimi sembolünü görmüyorum 'digits' argüman olmadan kullanılmayan bir argüman ... olduğuna dair bir hata alıyorum. [Buraya bakın] (http://puu.sh/kShhA/0398a4e597.png) – David