在格式化位数时转置 xtable
Posted
技术标签:
【中文标题】在格式化位数时转置 xtable【英文标题】:Transpose xtable while formatting number of digits 【发布时间】:2014-02-08 18:41:45 【问题描述】:我有一个包含 2 行(预处理/后处理)和 11 列的数据框,我想将其显示为 11x2 表。以下内容很好地完成了这项工作:
print(xtable(t(df)))
但是,我不知道如何控制位数并完成转置。后 xtable 转置可能吗?
df <- xtable(df)
digits(df) <- c(0,0,0,1,0,1,2,0,1,0,0,2)
t(df) # Does not work; is a post-xtable transpose possible?
我也尝试过在创建 xtable 之前进行转置,然后单独更改行的数字,但也无法使其正常工作,即
df <-xtable(t(df)) # works as intended
digits(df[10,]) <- c(0,1,1) # no error, but does nothing
一般的挑战是,在决赛桌中,我需要在同一列的行中使用不同的小数位数。这让我认为可能需要第一种方法的某些版本,以便可以使用标准的 xtable 数字控件(即Control number of decimal places on xtable output in R)
【问题讨论】:
在这种情况下,我将所有内容逐行转换为字符向量,我可以在其中控制位数。 我会编辑数字的表示并在强制转换为 xtable 之前转置。尝试使用round
@BrandonBertelsen 有没有一种方法可以像digits()
那样一步完成这一切?
【参考方案1】:
一个问题是您的“数字”参数有 12 项长。去掉前导的“0”可以减少警告:
df <- as.data.frame(matrix(rnorm(22), nrow=2))
print(xtable(t( mapply("format", df, digits=c(0,0,1,0,1,2,0,1,0,0,2)))))
% latex table generated in R 3.0.2 by xtable 1.7-1 package
% Sat Feb 8 11:37:06 2014
\begintable[ht]
\centering
\begintabularrll
\hline
& 1 & 2 \\
\hline
V1 & 0 & 0 \\
V2 & 0 & 1 \\
V3 & 2.1 & -0.5 \\
V4 & -2 & 1 \\
V5 & -0.7 & -0.7 \\
V6 & 1.03 & -0.28 \\
V7 & -1 & 0 \\
V8 & -0.139 & 0.006 \\
V9 & 0 & -0 \\
V10 & 1 & -0 \\
V11 & 0.33 & 1.10 \\
\hline
\endtabular
\endtable
矩阵和 data.frames 的转置函数似乎强制数字宽度的列统一(或者可能是它们的打印方法?
这是一个非常笨拙的努力:
capture.output(apply(cbind(t(df), digits), 1, function(x)
cat( c(round( x[1:2], x[3]) ,"\n") ) ) )
[1] "0 0 " "0 1 " "2.1 -0.5 " "-2 1 " "-0.7 -0.7 "
[6] "1.03 -0.28 " "-1 0 " "-0.1 0 " "0 0 " "1 0 "
[11] "0.33 1.1 " "NULL"
【讨论】:
谢谢,这就行了。有趣的是,digits
参数在您的示例中的功能似乎与 xtable 不同:对于“格式”,它等于所需位数的总数,而对于 xtable,它等于小数点右侧所需的位数点。
我认为它以行为基础给出了有效数字的最小数量。以上是关于在格式化位数时转置 xtable的主要内容,如果未能解决你的问题,请参考以下文章