Filtrar filas de la tabla para regresión

Filtrar filas de la tabla para regresión

Tengo una tabla que contiene una bandera y valores xey. Me gustaría tener una regresión para todas las filas con 1 en la primera columna. ¿Cómo puedo hacer esto?

\documentclass{article}
\usepackage{array}
\usepackage{pgfplots}
\pgfplotsset{compat=1.5.1}
\usepackage{pgfplotstable}
\begin{document}
  \pgfplotstableread{
    Exmpl  a   v
    1      0   0
    1      1   1
    1      2   1
    1      3   4
    2      0   -0
    2      1   -1
    2      2   -1
    2      3   -4
  } \data
  \begin{tikzpicture}
    \begin{axis} % [legend pos=outer north east]
      \addplot table [x=a, y=v] {\data};
      \addplot table [x=a, y={create col/linear regression={y=v}}] {\data};
    \end{axis}
  \end{tikzpicture}
\end{document}

Creo que los filtros de pgfplots no se aplican aquí, ya que supongo que pgfplots solo obtiene los valores xey. Sería fantástico si existiera la posibilidad de crear una tabla filtrada y hacer la regresión y trazar cosas desde allí.

Respuesta1

Creo que tengo casi la solución con la ayuda de dos preguntas: Cree una tabla de contingencia usando pgfplotstabley ¿Accediendo a elementos de tabla individuales con pgfplots? La idea es transponer la matriz, crear una nueva matriz, recorrer todas las columnas y copiar las columnas, si el valor Exmpl - es 1.

\documentclass{article}
\usepackage{array}
\usepackage{pgfplots}
\pgfplotsset{compat=1.5.1}
\usepackage{pgfplotstable}
\usepackage{ifthen}

\newcommand{\pgfplotstablefilterrows}[3]
{
  \pgfplotstablegetrowsof{#1}
  \pgfmathsetmacro{\NumOfRows}{\pgfplotsretval}
  \pgfmathsetmacro{\MaxRow}{\NumOfRows-1}
  \pgfplotstablegetcolsof{#1}
  \pgfmathsetmacro{\NumOfCols}{\pgfplotsretval}

  \pgfplotstabletranspose{\TransposedData}{#1}
  \pgfplotstableset{create on use/TransposedHead/.style={copy column from table={\TransposedData}{[index]0}}}
  \pgfplotstablenew[columns={TransposedHead}]{\NumOfCols}{\TransposedFilteredData}
  \pgfplotsforeachungrouped \pgfplotstablerowindex in {0,1,...,\MaxRow}{ % Row loop
    #3
  }
  \pgfplotstabletranspose[colnames from=TransposedHead,input colnames to=]{#2}{\TransposedFilteredData}
  \pgfplotstableclear{\TransposedData}
  \pgfplotstableclear{\TransposedFilteredData}
}

\begin{document}
  \pgfplotstableread{
    Exmpl  a   v
    1      0   0
    1      1   1
    1      2   1
    1      3   4
    2      0   -0
    2      1   -1
    2      2   -1
    2      3   -4
  } \data

  \pgfplotstablefilterrows{\data}{\FilteredData}
  {
    \pgfplotstablegetelem{\pgfplotstablerowindex}{[index]0}\of\data
    \ifthenelse{\equal{\pgfplotsretval}{1}}
    {
      \pgfplotstablecreatecol[copy column from table={\TransposedData}{\pgfplotstablerowindex}]{\pgfplotstablerowindex}{\TransposedFilteredData}
    }
    {}
  }

  \begin{tikzpicture}
    \begin{axis} % [legend pos=outer north east]
      \addplot table [x=a, y=v] {\data};
      \addplot table [x=a, y={create col/linear regression={y=v}}] {\FilteredData}; % compute a linear regression from the input table
    \end{axis}
  \end{tikzpicture}
\end{document} 

Como puede ver en el código, no tengo mucha experiencia en programación látex. De todos modos, funciona. Mejor, Juhui

información relacionada