![转置表格并手动设置行标签](https://linux22.com/image/338866/%E8%BD%AC%E7%BD%AE%E8%A1%A8%E6%A0%BC%E5%B9%B6%E6%89%8B%E5%8A%A8%E8%AE%BE%E7%BD%AE%E8%A1%8C%E6%A0%87%E7%AD%BE.png)
我是这个论坛的新手,对使用包转置数据有疑问pgfplotstable
。我找到了一篇解释如何转置表格的帖子,并尝试使用文档进行修改,但我找不到正确的命令。
我有一个输入 CSV 文件,其中包含一系列值(仅一行):
2016-06-13 05:00,6.2,5305,849,29.0,160,1,160
我想使用 LaTeX
- 读取文件,
- 生成包含这些值的垂直表,并
- 为输出表的每一行分配一个任意名称。
我为此提供的代码:
\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}