knitr :: kable()如何忽略格式化整数列并格式化所有欧姆数字列?
示例:
knitr::kable(x = as.data.frame(rbind(c(1L, 21.211), c(2L, 31.233))), format.args = list("digits" = 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|"
由于
答案 0 :(得分:1)
j
始终对所有数字列应用相同的格式,因此您唯一的选择是在调用之前转换为字符列,如J_F的参考建议。
我怀疑它是否可以完全自动化。您开始使用的数据框只有knitr::kable
列; numeric
值被integer
转换为numeric
。 (你可以通过不同的方式构建数据帧来避免这种情况。)假设你有一些方法来构造一个向量,指示你想要以哪种方式格式化哪些列,你可以自动执行以下操作:
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