我有一个包含数字和字符串的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的字符串。
有谁知道解决方案?
答案 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)]