xtable - data.frame 中的数字也包含字符串

xtable - digits in data.frame that also contains strings

我有一个包含数字和字符串的 data.frame,我想控制 xtable 打印中的数字。出于某种原因,xtable 似乎忽略了 digits=2 命令。参见:

\documentclass{article}
\begin{document}

<<echo=F, results='asis'>>=
library("xtable")
df <- data.frame(matrix( c("aaa", "bbb", seq(0.1, 1, length.out=6) ), 2, 4) )

print(xtable(df, digits=2))
print(xtable(df, digits=c(0, 0, 2, 2, 2)))
@
\end{document}

None 两次打印确实会影响输出中的位数,即都在逗号后面抑制零,例如0.1 和 1。我希望它分别为 0.10 和 1.00,以便所有数字具有相同的长度。

digits=2 命令在 data.frame 中没有字符串时可以完美运行。参见:

df2 <- data.frame(matrix( seq(0.1, 1, length.out=6), 2, 3) )
print(xtable(df2, digits=2))

我正在寻找的是一种在 xtable 中打印 data.frame 的方法,它确实包含所有数值的数字均为 2 的字符串。

有人知道解决办法吗?

在您的示例中,您从字符矩阵创建数据框,其中每一列都是一个字符。 Xtable 不知道如何将数字应用于字符。尝试从一开始就将 data.frame 定义为 data.frame,然后数字列将是数字,字符列将是字符。这应该有效:

df <- data.frame(X1 = c("aaa", "bbb"),X2 = c(0.1,0.28),X3 = c(0.46,0.64), X4 = c(0.82, 1))
print(xtable(df, digits=2)) 

根据要求,一种将全字符数据框转换为字符和数字列混合的快速方法:

df[] <- lapply(df, function(x) if (anyNA(y <- as.numeric(x))) x else y)

data.table 包中的另一个更优雅的解决方案:

library(data.table)
setDT(df)[, lapply(.SD, function(x) if(anyNA(y <- as.numeric(x))) x else y)]