Функция mutate дает неожиданные результаты для числового столбца в таблице (huxtable), но не в кадре данных - PullRequest
1 голос
/ 12 апреля 2019

Я пытаюсь научиться создавать красивые таблицы, используя пакет huxtable.Это кривая обучения, но пока я действительно впечатлен.Однако я столкнулся с несколькими проблемами, которые, похоже, не могу решить.

Во-первых, я пытаюсь отформатировать числа так, чтобы был разделитель запятой для позиции тысяч (используя функцию mutate_at изпакет dplyr и prettyNum. Он работает хорошо, за исключением того, что для столбцов с числовым классом обнуляются внутренние нули (например, 1001 становится 1,1 вместо желаемого 1,001). Если класс col является целым числом, тожелаемый вывод получен. Кроме того, правильный вывод получается, если входные данные являются кадром данных, а не huxtable, независимо от того, является ли столбец числовым или целочисленным.

Во-вторых, когда я добавляю другое форматирование таблицы (в частности, заголовок), кажется, что заголовок не переносится, когда я записываю таблицу в файл Word. Кроме того, создается примечание:

Note: zip::zip() is deprecated, please use zip::zipr() instead

НижеПример кода, который, я думаю, иллюстрирует проблему.

Мои вопросы:

1) Почему функция mutate выдает странный результат для nuстолбец метрики в huxtables, но не во фреймах данных, и как я могу убедиться, что он работает?Конечно, я мог бы выполнить форматирование чисел перед преобразованием кадра данных в таблицу, но я все же хотел бы знать, что здесь происходит.

2) Почему форматирование таблицы не сохраняется в выходных данныхфайл?

3) Что означает примечание об использовании zipr, и может ли это привести к тому, что ссылки на него будут также нести ответственность за сбой экспорта свойств таблицы?

Спасибо, Гленн

library(dplyr)
library(flextable)
library(huxtable)

test=data.frame(var1=1918:1925,var2=c(9009,1000:1006),var3 = 1100:1107)
str(test)
HUX <- hux(test)
number_format(HUX)
number_format(HUX[,2]) <- 0
# works as expected on data frame
mutate_at(test,-1,.funs=list(~prettyNum(.,big.mark=",")))
# does not work as expected on huxtable, for var2 of class numeric
mutate_at(HUX,-1,.funs=list(~prettyNum(., big.mark=",")))

# add caption, borders, and colnames
set_caption(HUX,"Example table") %>%
set_caption_pos("topleft") %>%
set_top_border(1,,1) %>%
set_bottom_border(final(1), , 1)    %>%
add_colnames()

# write out the table (this produces a note about zipr)
quick_docx(HUX)            

1 Ответ

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

Примечание об использовании zipr: см. https://github.com/awalker89/openxlsx/issues/454

Re mutate_at: ваши данные корректно преобразуются, но huxtable отображает их неправильно. Каждый номер до и после запятой распознается как отдельный. (Распознать число сложно, пойдем по магазинам…) Я бы предложил использовать number_format вместо непосредственного преобразования данных:

number_format(HUX)[,2:3] <- list(function(x) prettyNum(x, big.mark=",")) 

Наконец, у вашей второй проблемы есть простое решение: вы меняете все функции HUX, но не сохраняете результат обратно в исходную переменную. Помните, что R - это функциональный язык, объекты очень редко модифицируются на месте. Добавьте HUX <- в начало вашей цепочки dplyr.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...