Как отформатировать столбец 1 способом, но 1 строкой в ​​этом столбце другим способом в R datatable (DT) - PullRequest
1 голос
/ 01 апреля 2019

Я борюсь с проблемой DT, в которой я хочу отформатировать 1 столбец как scientific annotation, но некоторые значения в этом столбце являются percentage значениями в качестве таблицы, с которой я имею дело.

Если я заранее изменю значение в таблице на paste(n, "%", sep = ' '), rowcallback застревает на нечисловом значении

, в любом сценарии я могу использовать либо rowcallback (см. Ниже) для форматирования scientific annotation ИЛИ в другом случае, используйте formatPercentage('columnname', 2) для форматирования столбца в процентах, но я хотел бы сделать как один столбец, так и одну строку в нем, которые мне нужно представить как 'n%, в то время какОстальная часть колонки находится в научном ан.

Есть ли способ выполнить rowcallback для 1 столбца, но исключить определенные строки,

ИЛИ объединить rowcallback для scientific annotation и отформатировать другие ячейки в процентахв процентах (х%)

datatable ниже генерирует науч.ап.но как изменить cars[5,2] на 2% десятичное значение% с символом% позади него?

datatable(cars/10, 
          options = list(
                 rowCallback = JS(
      "function(row, data) {",
      "    $('td:eq(2)', row).html(data[2].toExponential(1));",
      "}")
          )
)

Ответы [ 2 ]

1 голос
/ 01 апреля 2019

Форматирование столбца в R не очень хорошая опция, потому что тип столбца станет символьным, и вы потеряете возможность сортировать столбец.Вот способ JavaScript:

datatable(cars/10, 
          options = list(
            rowCallback = JS(
              "function(row, data, num, index){",
              "  if(index != 4){",
              "    $('td:eq(2)', row).html(data[2].toExponential(1));",
              "  }else{",
              "    $('td:eq(2)', row).html((100*data[2]).toFixed(2) + '%')",
              "  }",
              "}")
          )
)

enter image description here

0 голосов
/ 01 апреля 2019

Чтобы получить научную аннотацию, вы можете использовать функцию formatC() с аргументом format = 'e' и digits = 1.

formatC(cars$dist[1:5] / 10, format = 'e', digits = 1)
# [1] "2.0e-01" "1.0e+00" "4.0e-01" "2.2e+00" "1.6e+00"

Чтобы сделать визуализацию в процентах, так как formatPercentage() преобразует весь столбец, вы можете сделать это самостоятельно с помощью paste().

Затем просто создайте условие, чтобы сказать, с помощьюifelse() например, при использовании научного формата и при использовании процентного.

cars %>% 
  mutate_all(funs(. / 10)) %>% 
  mutate(Condition = 1:n()) %>% 
  mutate(dist = ifelse(Condition == 5,
                       paste(round(dist, 2), '%'),
                       formatC(dist, format = 'e', digits = 1))
  ) %>% 
  select(-Condition) %>% 
  datatable()

enter image description here

...