R:条件格式化具有百分比(%)值的列

R: Conditional formatting a column with percentage(%) value

我需要对 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
)

输出应该如下所示。

关于边界信息

我正在查看的是为 c2:c6 应用外边框。

为了阐明我的目的,最终输出将如下所示。我有一些其他代码来格式化 headers 和列 A:B 的边框。因为百分比风格,影响了我的界线。

您不需要使用 scales 包中的 label_percent。 您可以使用 styleaddStyle 函数将百分比格式与颜色规则一起应用到工作簿。另一件事,我在 conditionalFormatting 的文档示例中发现,如果您的规则仅适用于一个,则无需在 rule 参数中指定列名(例如 C)与另一列中的值无关的列。

这是我使用的代码:

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", )

已更新以添加边界信息

如果您想创建边界线和百分比格式,您可以使用 borderborderStyle,如下所示:


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")

结果如下: