R DT datatable - 格式化文本字段并垂直对齐另一个字段

时间:2016-07-13 10:08:08

标签: jquery html r datatable shiny

我有一个带有文本字段的数据集,我希望使用包datatable中的函数DT来显示该数据集。我还希望(1)格式化该文本字段,以便显示换行符并强调某些文本块;和(2)垂直对齐其余字段,以便将它们的值推到顶部。

考虑以下示例:

library(DT)
L <- 10
datatable(
  data.frame(
    var1 = sapply(1:L, function(x) 
      paste("<X>",paste0(x,
                         letters, 
                         LETTERS, 
                         "\n", 
                         collapse=" "))),
    var2 = round(rnorm(L),2)
  ) 
)

Output

如您所见,输出忽略\n。我还想<X>大胆。我尝试过使用<br>之类的HTML标记,但似乎没有任何工作,因为var1中的文字已被转义。取消它(可以通过datatable选项实现)并不是一个好主意,因为(实际)文本包含特殊字符。我还希望将var2的值推到最顶层。

如果它有所作为,我想在Shiny网络应用程序中使用输出。

有没有人对如何实现我正在寻找的东西有任何建议?

非常感谢提前。

2 个答案:

答案 0 :(得分:1)

要在DT单元格中实现换行符,您需要使用<br/>代替\ n并使用escape参数转义(它将被读作HTML)。

要更改单元格中值的对齐方式,可以使用datatable函数选项中的columnDefs参数。问题是你只能水平对齐。(左,右和中) 使用rowCallback函数,我可以手动将第二列中的每个值设置为顶部对齐。但这不是一个理想的解决方案。

library(DT)
L <- 10

dataset <- data.frame(
  var1 = sapply(1:L, function(x) 
    paste("<X>",paste0(x,
                       letters, 
                       LETTERS, 
                       "<br/>", 
                       collapse=" "))),
  var2 = round(rnorm(L),2)
)

datatable(dataset, escape = 1,  
  options = list(
    columnDefs = list(list(className = 'dt-center', targets = 2)),
    rowCallback=JS(paste0("function(row, dataset) {var value=dataset[2]; if (value!==null) $(this.api().cell(row,2).node()).css({'vertical-align': 'text-top'});}"))
  )
)

答案 1 :(得分:1)

垂直对齐您的列内容,您可以这样做:

T1 <- datatable(dataset)

 T1 %>%
  formatStyle(c('column_1','column_2'), 'vertical-align'='top') %>% 
  formatStyle(c('column_1','column_2'), 'text-align' = 'left')