Lets assume we\'re using this command to create the dummy data:
Data <- data.frame(
X = paste(c(sample(1:10),sample(1:10)), c
I doubt it's possible to change Excel's conditional formatting directly from R. So, first open the Excel workbook and set the conditional formatting for the column "X" is going into to whatever color vs value conditions you want. Then when you write from R into the workbook, the coloring will happen.
I am essentially copying code from this question and my answer there and making some adjustments for this use case. I'm not sure about the etiquette on this, but I just wanted to show that this can be done! Anyone, let me know if I have done something I shouldn't do in reusing the code in the linked question for this answer. If this is seen as a duplicate now that the other question is answered, I'm fine with that. Just trying to help!
First, reformat the data a little.
# split the X column so there will be one numeric entry per cell
d <- matrix(as.numeric(unlist(strsplit(as.character(Data$X), ";"))),
ncol = 20, byrow = TRUE)
d <- data.frame(d, Data$Y)
cols <- length(d[1, ]) # number of columns, we'll use this later
Second, we can use functions in xlsx to create a workbook, and then get at the cell values.
library(xlsx)
# exporting data.frame to excel is easy with xlsx package
sheetname <- "mysheet"
write.xlsx(d, "mydata.xlsx", sheetName=sheetname)
file <- "mydata.xlsx"
# but we want to highlight cells if value greater than or equal to 5
wb <- loadWorkbook(file) # load workbook
fo1 <- Fill(foregroundColor="blue") # create fill object # 1
cs1 <- CellStyle(wb, fill=fo1) # create cell style # 1
fo2 <- Fill(foregroundColor="red") # create fill object # 2
cs2 <- CellStyle(wb, fill=fo2) # create cell style # 2
sheets <- getSheets(wb) # get all sheets
sheet <- sheets[[sheetname]] # get specific sheet
rows <- getRows(sheet, rowIndex=2:(nrow(d)+1)) # get rows
# 1st row is headers
cells <- getCells(rows, colIndex = 2:cols) # get cells
# in the wb I import with loadWorkbook, numeric data starts in column 2
# The first column is row numbers. The last column is "yes" and "no" entries, so
# we do not include them, thus we use colIndex = 2:cols
values <- lapply(cells, getCellValue) # extract the cell values
Next we find the cells that need to be formatted according to the criteria.
# find cells meeting conditional criteria > 5
highlightblue <- NULL
for (i in names(values)) {
x <- as.numeric(values[i])
if (x > 5 && !is.na(x)) {
highlightblue <- c(highlightblue, i)
}
}
# find cells meeting conditional criteria < 5
highlightred <- NULL
for (i in names(values)) {
x <- as.numeric(values[i])
if (x < 5 && !is.na(x)) {
highlightred <- c(highlightred, i)
}
}
Finally, apply the formatting and save the workbook.
lapply(names(cells[highlightblue]),
function(ii) setCellStyle(cells[[ii]], cs1))
lapply(names(cells[highlightred]),
function(ii) setCellStyle(cells[[ii]], cs2))
saveWorkbook(wb, file)