2017-09-25 4 views
1

flexdashboard을 만들려면 문서에서 현재 datatable을 사용하고 있습니다. NA에 숫자 열이 있습니다. 열을 내림차순으로 정렬하기 위해 클릭하면 가장 큰 값이 먼저 놓이고 NA/Null 값이 마지막에옵니다. 오름차순으로 정렬 할 때 NA/Null 값을 먼저 입력 한 다음 숫자 값을 입력합니다. 오름차순으로 정렬 할 때 마지막으로 null 값을 정렬하는 방법이 있습니까? DataTables은이 문제에 대해 plugin을 가질 수 있지만 R DataTables 버전에서는 not supported입니다. RStudio에서 테이블을 볼 때와 같은 방법으로 숫자 열을 정렬 할 수 있기를 기대합니다. 나는 테이블은 다음과 같이한다 오름차순 순서로 Numeric.null 열을 정렬 할 때R 테이블의 DataTables로 null 값을 최하위로 정렬

library(DT) 
library(tidyverse) 


Table.with.null <- tibble(Category=c("A","B","C","D"), 
          Numeric=seq(1,4), 
          Numeric.null=c(1,2,3,NA)) 

datatable(Table.with.null,rownames=FALSE) 

: 여기

내가 찾고 있어요 기능의 재현 예입니다

Category Numeric Numeric.null 
A   1  1 
B   2  2 
C   3  3 
D   4  NA 

을 어느 그렇습니다. 나는 일종의 에서 Numeric.null 열이 순서 표는 다음과 같이한다 내림차순 때 :

Category Numeric Numeric.null 
C   3  3 
B   2  2 
A   1  1 
D   4  NA 

답변

0

비결은 콜백에게 인수를 사용하여 정렬 기능을 제공하는 것입니다. 이 예제의 js 함수는 나를 위해 작동하지 않습니다. (value 인수를 제공해야합니다 - 약간의 작업이 필요합니다). 그러나 여기에는 내 자신의 정렬 함수가있는 예제가 있습니다.

중요한주의 사항은 열 유형 정렬이 datatable 함수를 호출하기 바로 전에 문자로 변경되어야한다는 것입니다. 또한 rownames DT 인수가 FALSE 컬럼에 설정되어있는 동안 숫자 0,1,2,...

library(DT) 
library(dplyr) 

temp <-mtcars 
temp[1, "wt"] <- NA 
temp[2, "wt"] <- NA 

#OUTPUT - dtdata 
DT::datatable({ 
    temp %>% mutate(wt = as.character(wt)) 
}, 
callback = JS(" 
    $.fn.dataTableExt.oSort['NumericOrBlank-asc'] = function(x,y) { 
    var retVal; 
     if(x === '' || $.isEmptyObject(x)) x = 1000; 
    if(y === '' || $.isEmptyObject(y)) y = 1000; 
    x = (x = parseFloat($.trim(x).replace(/,/g,''))) ? x : 0; 
    y = (y = parseFloat($.trim(y).replace(/,/g,''))) ? y : 0; 
    if (x==y) retVal= 0; 
    else retVal = (x>y) ? 1 : -1; 
    return retVal; 
    }; 
    $.fn.dataTableExt.oSort['NumericOrBlank-desc'] = function(y,x) { 
    var retVal; 
    x = (x = parseFloat($.trim(x).replace(/,/g,''))) ? x : 0; 
    y = (y = parseFloat($.trim(y).replace(/,/g,''))) ? y : 0; 
    if (x==y) retVal= 0; 
    else retVal = (x>y) ? 1 : -1; 
    return retVal; 
    }; 
    "), 
options = list(
    autoWidth = TRUE, 
    aoColumnDefs = list(list(width = '100px', bSortable = TRUE, sType = 
'NumericOrBlank', targets = c(5))) 
), rownames = FALSE) 
이 있음을 염두에 두어야