在使用 booktabs 和 tabularx 创建的表中,按小数对齐 knitr 命令 \Sexpr{} 中的数值

在使用 booktabs 和 tabularx 创建的表中,按小数对齐 knitr 命令 \Sexpr{} 中的数值

我正在使用和编写我的论文作为动态文档.Rnw。我在外部脚本中运行统计分析,并将其导入到我的主文件中。knitrRR.Rnw

我还想创建一些表格来显示汇总统计数据和我的回归分析的输出。对于某些单元格,我手动输入值,而对于其他单元格,我使用源文件中的knitr命令调用这些值。\Sexpr{}R

以下 MWE 深入了解了我所说的内容:

\documentclass{scrartcl}
\usepackage{tabularx}
\usepackage{booktabs}

\begin{document}

\begin{table}
\caption{This is a table}
\begin{tabularx}{\textwidth}{XXXXX}
\toprule
&\multicolumn{2}{c}{First subset} & \multicolumn{2}{c}{Second subset}\\
\cmidrule(lr){2-3} \cmidrule(lr){4-5}
& {Model1: WTP\_PR\_bin} & {Model2: WTP\_PR\_log} & {Model3: WTP\_RE\_bin} & {Model4: WTP\_RE\_log} \\ 
\midrule
Const      & \Sexpr{sprintf("%.3f", round(244/33, digits=3))}*** & 22.300  & \Sexpr{round(exp(0.987), digits=3)}  & 65.876\\
Variable 1 & \Sexpr{round(exp(0.873), digits=3)}                 &-34.445* & \Sexpr{round(sqrt(75688), digits=3)} & 0.348\\
Variable 2 & \Sexpr{78*87.343}                                   & 222.873 & -0.874                               & -1.234**\\
\bottomrule
\end{tabularx}
Note: Displayed are the coefficients; *\(p<0.1\), **\(p<0.05\), ***\(p<0.001\).
\end{table}

\end{document}

上述代码的结果如下:

在此处输入图片描述

我现在的目标是让每一列的值都按小数点对齐。请参见上表中值的对齐方式。值左对齐,但不对齐到小数点。

有人知道该如何解决这个问题吗?我期望是这样的:

在此处输入图片描述

感谢您的支持。

马格努斯

答案1

对于数值数据,使用tabular*(或tabular)而不是:tabularx

在此处输入图片描述

\documentclass{scrartcl}
\usepackage{dcolumn}
\usepackage{booktabs}
\newcommand\hd[1]{\multicolumn{1}{c}{\begin{tabular}{@{}c@{}}#1\end{tabular}}}

% hack as no R on this machine
\def\Sexpr#1{12.123}
\catcode`\%=12

\begin{document}

\begin{table}
\caption{This is a table}
\begin{tabular*}{\textwidth}{@{\extracolsep{\fill}}l*{4}{D{.}{.}{4.3}}@{}}
\toprule
&\multicolumn{2}{c}{First subset} & \multicolumn{2}{c}{Second subset}\\
\cmidrule(lr){2-3} \cmidrule(lr){4-5}
& 
\hd{Model1:\\ WTP\_PR\_bin} &
\hd{Model2:\\ WTP\_PR\_log} &
\hd{Model3:\\ WTP\_RE\_bin} &
\hd{Model4:\\ WTP\_RE\_log} \\ 
\midrule
Const      & \Sexpr{sprintf("%.3f", round(244/33, digits=3))}*** & 22.300  & \Sexpr{round(exp(0.987), digits=3)}  & 65.876\\
Variable 1 & \Sexpr{round(exp(0.873), digits=3)}                 &-34.445* & \Sexpr{round(sqrt(75688), digits=3)} & 0.348\\
Variable 2 & \Sexpr{78*87.343}                                   & 222.873 & -0.874                               & -1.234**\\
\bottomrule
\end{tabular*}
Note: Displayed are the coefficients; *\(p<0.1\), **\(p<0.05\), ***\(p<0.001\).
\end{table}

\end{document}

相关内容