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

xtable—data.frame中也包含字符串的数字,r,knitr,digits,xtable,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,

我有一个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}
我要寻找的是一种在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中需要大量的键入。您知道在定义了character 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)
library(data.table)
setDT(df)[, lapply(.SD, function(x) if(anyNA(y <- as.numeric(x))) x else y)]