Pet*_*ter 5 r formula rowwise openxlsx
openxlsx编写公式的函数似乎仅按列添加公式。
有没有一种有效的方法来按行编写公式?
通过一个可重现的示例来说明该问题:
df <- data.frame(a = 1:3,
b = 4:6,
c = 7:9)
# create workbook, worksheet and write data to worksheet
wb <- createWorkbook()
addWorksheet(wb, "Sheet 1")
writeData(wb, "Sheet 1", x = df)
# formula to be added rowwise to cells A5:C5
f <- c("SUM(A2:A4)", "SUM(B2:B4)", "SUM(C2:C4)")
# Using the openxlsx function results in columnwise addition of the formula vector:
writeFormula(wb, sheet = 1, x = f, startCol = 1, startRow = 5)
saveWorkbook(wb, "rowwise_writeFormula.xlsx", overwrite = TRUE)
Run Code Online (Sandbox Code Playgroud)
这导致:
writeFormula行式简单的方法是单独添加每个公式,对于小数据集也许可以。
writeFormula(wb, sheet = 1, x = "SUM(A2:A4)", startCol = 1, startRow = 5)
writeFormula(wb, sheet = 1, x = "SUM(B2:B4)", startCol = 2, startRow = 5)
writeFormula(wb, sheet = 1, x = "SUM(B2:B4)", startCol = 3, startRow = 5)
Run Code Online (Sandbox Code Playgroud)
这提供了我想要的,但对于数百个列来说并不是一个可行的方法。
使用 purrr::pwalk 可以将其封装在一个函数中,这是一个改进:
formula_inputs <- list(formula = f,
start_col = 1:3,
start_row = rep(5, 3))
purrr::pwalk(formula_inputs, function(formula, start_col, start_row) writeFormula(wb, sheet = 1, x = formula, startCol = start_col, startRow = start_row))
Run Code Online (Sandbox Code Playgroud)
无论哪种方式,这都可以满足要求:
我的问题:有更好的方法吗?或者它可能是 openxlsx 的增强?
在我的实际情况中,列表中的 10 个数据帧有 100 个变量,每个变量都需要多个 (10) 行式公式来构建总数。总共需要编写大约10,000个公式,这需要几分钟;因此,任何关于如何加快这一进程的想法都将受到欢迎。
注意:openxlsx 使用 writeData 作为“公式”类向量的替代方法也会将向量添加为列;当我尝试将向量转置为行时,公式类丢失。
小智 2
我发现 for 循环在这里非常有用:
for(c in 1:3){
writeFormula(wb, 1, f[c], startCol = c, startRow = 5)
}
Run Code Online (Sandbox Code Playgroud)