xtable - data.frame中还包含字符串

时间:2015-10-01 11:14:49

标签: r knitr digits xtable

我有一个包含数字和字符串的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}

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

当data.frame中没有字符串时,

digits=2命令完全有效。参见:

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

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

有谁知道解决方案?

1 个答案:

答案 0 :(得分: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)]