R: Условное форматирование столбца с процентным (%) значением

Мне нужно будет выполнить цветовое условное форматирование для 1 конкретного столбца, отформатировать его в процентах и ​​экспортировать файл как .xlsx. Обратите внимание, что у меня есть 5 фреймов данных, с которыми я буду запускать этот код правила, и компилировать их в 1 рабочую книгу на разных листах. Я застрял в той части, где я не могу установить условное правило, если я отформатировал в нем процент. И наоборот, если я сначала использую условное форматирование, я не уверен, как мне отформатировать процент для этого столбца. Пожалуйста, обратитесь к моему коду ниже.

## Dataframe
cost_table <- read.table(text = "FRUIT  COST  SUPPLY_RATE
1  APPLE   15   0.026377
2  ORANGE   14  0.01122
3  KIWI   13  0.004122
5  BANANA   11  0.017452
6  AVOCADO   10   0.008324       "  , header = TRUE)

## This is the line where I label the %. However if I do that, conditional formatting will not recognize it in the rule
cost_table$SUPPLY_RATE <- label_percent(accuracy = 0.01)(cost_table$SUPPLY_RATE)

## Creating workbook and sheet
Fruits_Table <- createWorkbook()
addWorksheet(Fruits_Table,"List 1")

writeData(Fruits_Table,"List 1",cost_table)


## Style color for conditional formatting
posStyle <- createStyle(fontColour = "#006100", bgFill = "#C6EFCE")
negStyle <- createStyle(fontColour = "#9C0006", bgFill = "#FFC7CE")

## If Supply rate is above 1.5%, it will be green, if it's equivalent or below, it will be red
conditionalFormatting(Fruits_Table, "List 1",
                      cols = 3,
                      rows = 2:6, rule = "C2> 0.015", style = posStyle
)

conditionalFormatting(Fruits_Table, "List 1",
                      cols = 3,
                      rows = 2:6, rule = "C2<= 0.015", style = negStyle
)

Вывод должен быть таким, как показано ниже.

R: Условное форматирование столбца с процентным (%) значением

Относительно пограничной информации

Я смотрю на применение внешней границы для c2: c6. R: Условное форматирование столбца с процентным (%) значением

Чтобы прояснить мою цель, окончательный вывод будет показан ниже. У меня есть другие коды для форматирования границ заголовков и столбцов A:B. Из-за процентного стиля это повлияло на мою границу.

R: Условное форматирование столбца с процентным (%) значением

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
3
0
65
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вам не нужно использовать label_percent из пакета scales. Вы можете применить процентный формат вместе с правилами цвета к книге, используя функции style, а затем addStyle. Еще одна вещь, которую я нашел в задокументированных примерах conditionalFormatting, что вам не нужно указывать имя столбца (например, C) в аргументе rule, если ваше правило применяется только к одному столбцу без отношения к значениям в другом столбце.

Вот код, который я использовал:

Fruits_Table <- createWorkbook()
addWorksheet(Fruits_Table,"List 1")
writeData(Fruits_Table,"List 1",cost_table)
conditionalFormatting(Fruits_Table, "List 1",
                      cols = 3,
                      rows = 2:6, rule = "> 0.015", style = posStyle) 
conditionalFormatting(Fruits_Table, "List 1",
                       cols = 3,
                        rows = 2:6, rule = "<= 0.015", 
                       style = negStyle)
percent_style <- createStyle(numFmt = "PERCENTAGE")
addStyle(Fruits_Table,"List 1", style = ,percent_style, rows = 2:6, cols = 3)

Я попробовал этот код, и он работает.

saveWorkbook(Fruits_Table, "my_fruits_table.xlsx", )

Обновлено для добавления пограничной информации

Если вы хотите создать границу вместе с процентным форматом, вы можете использовать border и borderStyle следующим образом:


percent_border_style<- createStyle(numFmt = "PERCENTAGE", 
                       border = "TopBottomLeftRight", 
                       borderStyle = "medium" )

addStyle(Fruits_Table,"List 1", 
        style = ,percent_border_style, 
        rows = 2:6, cols = 3)

saveWorkbook(Fruits_Table, "borderline_fruits_table.xlsx", )

Вот пограничный результат

Если вы хотите настроить разные стили для разных ячеек, как вы объяснили в своем комментарии, вам нужно createStyle для определенного стиля, а затем вы используете addStyle, чтобы применить этот конкретный стиль к определенной ячейке. Итак, вам нужно указать строку и столбец для каждого стиля. Чтобы сохранить стиль процентного формата, вам также нужно сохранить numFmt для каждого addStyle.

Вот пример кода для применения внешних границ к целевому столбцу. Код настраивает границы для трех групп ячеек:

top_side_line <- createStyle(numFmt = "PERCENTAGE", 
                             border = "TopLeftRight", 
                             borderStyle = "medium")
side_line <- createStyle(numFmt = "PERCENTAGE", 
                             border = "LeftRight", 
                             borderStyle = "medium")
bottom_side_line <- createStyle(numFmt = "PERCENTAGE", 
                             border = "BottomLeftRight", 
                             borderStyle = "medium")
addStyle(Fruits_Table,"List 1", 
         style = top_side_line, rows = 2, cols = 3)
addStyle(Fruits_Table,"List 1", 
         style = side_line, rows = 3:5, cols = 3)
addStyle(Fruits_Table,"List 1", 
         style = bottom_side_line, rows = 6, cols = 3)
saveWorkbook(Fruits_Table, "newline_fruits_table.xlsx")

Вот результат:

Привет Роман. Спасибо тебе за это. Ваше решение работает. Могу я также уточнить у вас, как я могу добавить к нему линии границ? Я попытался запустить другой addStyle, но он перезапишет процентный стиль. Мне нужны только граничные линии, окружающие каждый столбец из строк 2:6.

sushi4life 17.03.2022 08:22

Пожалуйста, проверьте мой обновленный ответ.

Abdur Rohman 17.03.2022 08:37

Более подробная информация доступна в ?openxlsx::createStyle

Abdur Rohman 17.03.2022 08:39

Привет Роман. Да, я пытался применить это условие, но граница применяется ко всем ячейкам. Мне потребуются только внешние границы. Я обновил свой вопрос скриншотом.

sushi4life 17.03.2022 09:22

Это относительно легко получить. Пожалуйста, проверьте мои обновления.

Abdur Rohman 17.03.2022 10:02

Другие вопросы по теме