转置表格并手动设置行标签

转置表格并手动设置行标签

我是这个论坛的新手,对使用包转置数据有疑问pgfplotstable。我找到了一篇解释如何转置表格的帖子,并尝试使用文档进行修改,但我找不到正确的命令。

我有一个输入 CSV 文件,其中包含一系列值(仅一行):

2016-06-13 05:00,6.2,5305,849,29.0,160,1,160

我想使用 LaTeX

  1. 读取文件,
  2. 生成包含这些值的垂直表,并
  3. 为输出表的每一行分配一个任意名称。

我为此提供的代码:

\documentclass{article}
\usepackage{pgfplotstable}
\usepackage{booktabs}

\begin{document}

\pgfplotstableread[
    col sep=comma,
]{test.csv}\normal

\pgfplotstabletranspose[
%    header=false
    input colnames to={colA,colB}
]\transpose\normal

%\begin{center}
\pgfplotstabletypeset[
string type,
every head row/.style={before row=\toprule, after row=\midrule},
every last row/.style={after row=\bottomrule},
every col no 0/.style={
    column type={l},
    column name={Averages for the week},
    %postproc cell content/.append style={/pgfplots/table/@cell content/.add={Subj }{}},
    },
]\transpose

\end{document}

通过此代码,我得到了一个只有一列的表(并且在最后一行“index7”的末尾附加了一些文本),而我想要的是类似这样的内容(我在 TEX 文件中为每一行定义名称:

想要的输出

是否有可能做到这一点?

非常感谢您的回复。

答案1

也许是这样的:

\documentclass{article}
\usepackage{readarray,filecontents,stackengine,booktabs}
\begin{filecontents*}{mydata.dat}
2016-06-13 05:00,6.2,5305,849,29.0,160,1,160
\end{filecontents*}
\setstackEOL{,}
\renewcommand\stackalignment{r}
\def\sepdata#1,#2\relax{\def\Week{#1}\def\datalist{#2}}
\newcommand\readparsedef[1]{\readdef{#1}{\data}\expandafter\sepdata\data\relax}
\begin{document}
\readparsedef{mydata.dat}
\begin{tabular}{lr}
\toprule
Averages for the week starting & \Week\\
\midrule
\Longstack[l]{Row Name1,
Row Name2,
Row Name3,
Row Name4,
Row Name5,
Row Name6,
Row Name7} & 
\expandafter\Longstack\expandafter{\datalist}\\
\bottomrule
\end{tabular}
\end{document}

在此处输入图片描述

答案2

使用 \pgfplotstable 是可能的,但非常非常困难。

\documentclass{article}
\usepackage{pgfplotstable,filecontents,booktabs}
\begin{filecontents*}{test.dat}
2016-06-13 05:00,6.2,5305,849,29.0,160,1,160
\end{filecontents*}

\begin{document}
\pgfplotstableread[col sep=comma,header=false,string type]{
Averages for week starting,RowName1,RowName2,RowName3,RowName4,RowName5,RowName6,RowName7
}\names% create column names
\fbox{\pgfplotstabletypeset[string type]\names}% debug

\pgfplotstableread[
    header=false,
    col sep=comma,
    string type
]{test.dat}\normal
\fbox{\pgfplotstabletypeset[string type]\normal}% debug

\pgfplotstablegetelem{0}{0}\of\normal
\let\mydate=\pgfplotsretval% will become column name later
\mydate% debug

\pgfplotstablevertcat\names\normal
\fbox{\pgfplotstabletypeset[string type,]\names}% debug

\pgfplotstabletranspose[header=false,colnames from=0]\transpose\names
\fbox{\pgfplotstabletypeset[string type]\transpose}% debug

\pgfplotstabletypeset[string type,columns={Averages for week starting,\mydate},
  columns/Averages for week starting/.style={column type=l},
  columns/\mydate/.style={column type=r},
  ]\transpose

\end{document}

演示

相关内容