knitr::kable() 如何忽略格式化整数列并格式化所有其他数字列?
示例:
knitr::kable(x = as.data.frame(rbind(c(1L, 21.211), c(2L, 31.233))), format.args = list("数字"= 2, "nsmall"= 2, "big.mark"= ".", "decimal.mark"= ",", "scientific"= FALSE))
它返回:
[1]“| V1| V2|” “|----:|-----:|” “| 1,00| 21,21|” “| 2,00| 31,23|”
我的输出是这样的:
[1]“| V1| V2|” “|----:|-----:|” “| 1 | 21,21 |” “| 2| 31,23|”
谢谢
最佳答案
knitr::kable
始终对所有数字列应用相同的格式,因此您唯一的选择是在调用它之前将其转换为字符列,如 J_F 引用文献所建议的那样。
我怀疑它是否可以完全自动化。您开始使用的数据框只有数字
列; 整数
值通过c()
转换为数字
。 (您可以通过以不同方式构建数据帧来避免这种情况。)假设您有某种方法来构建一个向量来指示您想要以哪种方式格式化哪些列,您可以自动执行如下操作:
df <- as.data.frame(rbind(c(1L, 21.211), c(2L, 31.233)))
intcolumn <- c(TRUE, FALSE) # This is hard to automate
for (i in seq_len(ncol(df))) {
if (intcolumn[i])
df[[i]] <- format(df[[i]])
else
df[[i]] <- format(df[[i]], digits = 2, nsmall = 2, big.mark = ".",
decimal.mark = ",", scientific = FALSE)
}
knitr::kable(df, align = "r") # right align as for numeric column
这会产生
| V1| V2|
|--:|-----:|
| 1| 21,21|
| 2| 31,23|
关于r - 使用数字和整数列格式化 Markdown 表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45817101/