我有一个数据帧,看起来像这样:
df <- tribble(~date, ~value, ~analyte, ~quantified,
01-01-2020, 8.6, Fe, TRUE,
02-06-2020, 10.4, Ni, TRUE,
01-01-2020, 2, Ni, FALSE)
对于许多分析程序,有一个量化(或检测或报告...)限制。量化列表示该值是高于还是低于此限制(T:高于,F:低于)。如果测试结果低于量化限制,则将量化限制记录为值,并将量化列设置为FALSE。因此,对于第三行的结果,量化极限是2 mg/L,样品的镍的真值在0-2 mg/L之间,但我们将其视为可能的最高值。
我需要将其转换为宽形式的excel电子表格(分析物作为列名,每个日期占一行),我希望为单元格提供低于量化限制的值的样式,但不太清楚如何实现。我在考虑将量化作为属性添加到value单元格,然后基于该属性应用openxlsx样式,但a)我不知道如何将属性应用于值而不是整个列,b)我不确定这是不是正确的方法。
下面给出了基本的输出,但正如我所说的,我不太明白如何以一种易于使用的方式将量化转换为宽形式,然后为低于量化限制的单元格设置xlsx样式。
library(openxlsx)
df %>%
dplyr::select(-quantification) %>%
pivot_wider(id_cols = c(date), names_from = analyte, values_from = value) -> df
dfWorkbook <- createWorkbook()
addWorksheet(dfWorkbook, "test")
writeData(dfWorkbook, sheet = "test", x = df)
脚注:不幸的是,分析物之间的定量限制随着时间的推移而变化,所以我不能只说“如果值> 2,测试(dfWorkbook,”addStyle“,BQL)”。
发布于 2020-12-04 07:41:44
我们所需要做的就是使用which(..., arr.ind=T)
来获得单元格索引,将1添加到行组件中,以说明列名所做的移位:
# keep the quantified vals in the same structure as the actual values
df %>%
dplyr::select(-value) %>%
pivot_wider(id_cols = c(date), names_from = analyte, values_from = quantified) -> df.atts
df %>%
dplyr::select(-quantified) %>%
pivot_wider(id_cols = c(date), names_from = analyte, values_from = value) -> df
dfWorkbook <- createWorkbook()
addWorksheet(dfWorkbook, "test")
writeData(dfWorkbook, sheet = "test", x = df)
## create and add a style to the cells that verify condition
quantified <- createStyle(
fontSize = 14, fontColour = "#FFFFFF", halign = "center",
fgFill = "#4F81BD", border = "TopBottom", borderColour = "#4F81BD"
)
# get the cell indices that verify the condition
mat <- which(df.atts == F, arr.ind = TRUE)
# add the style for each cell in this matrix
addStyle(dfWorkbook, sheet = 1, headerStyle, rows = mat[,1]+1, cols = mat[,2])
# save the workbook
saveWorkbook(dfWorkbook, "styled.xlsx", overwrite = TRUE)
https://stackoverflow.com/questions/65135092
复制相似问题