Saltar al contenido principal
LibreTexts Español

4.8: Marcos de datos

  • Page ID
    151504
  • \( \newcommand{\vecs}[1]{\overset { \scriptstyle \rightharpoonup} {\mathbf{#1}} } \)

    \( \newcommand{\vecd}[1]{\overset{-\!-\!\rightharpoonup}{\vphantom{a}\smash {#1}}} \)

    \( \newcommand{\id}{\mathrm{id}}\) \( \newcommand{\Span}{\mathrm{span}}\)

    ( \newcommand{\kernel}{\mathrm{null}\,}\) \( \newcommand{\range}{\mathrm{range}\,}\)

    \( \newcommand{\RealPart}{\mathrm{Re}}\) \( \newcommand{\ImaginaryPart}{\mathrm{Im}}\)

    \( \newcommand{\Argument}{\mathrm{Arg}}\) \( \newcommand{\norm}[1]{\| #1 \|}\)

    \( \newcommand{\inner}[2]{\langle #1, #2 \rangle}\)

    \( \newcommand{\Span}{\mathrm{span}}\)

    \( \newcommand{\id}{\mathrm{id}}\)

    \( \newcommand{\Span}{\mathrm{span}}\)

    \( \newcommand{\kernel}{\mathrm{null}\,}\)

    \( \newcommand{\range}{\mathrm{range}\,}\)

    \( \newcommand{\RealPart}{\mathrm{Re}}\)

    \( \newcommand{\ImaginaryPart}{\mathrm{Im}}\)

    \( \newcommand{\Argument}{\mathrm{Arg}}\)

    \( \newcommand{\norm}[1]{\| #1 \|}\)

    \( \newcommand{\inner}[2]{\langle #1, #2 \rangle}\)

    \( \newcommand{\Span}{\mathrm{span}}\) \( \newcommand{\AA}{\unicode[.8,0]{x212B}}\)

    \( \newcommand{\vectorA}[1]{\vec{#1}}      % arrow\)

    \( \newcommand{\vectorAt}[1]{\vec{\text{#1}}}      % arrow\)

    \( \newcommand{\vectorB}[1]{\overset { \scriptstyle \rightharpoonup} {\mathbf{#1}} } \)

    \( \newcommand{\vectorC}[1]{\textbf{#1}} \)

    \( \newcommand{\vectorD}[1]{\overrightarrow{#1}} \)

    \( \newcommand{\vectorDt}[1]{\overrightarrow{\text{#1}}} \)

    \( \newcommand{\vectE}[1]{\overset{-\!-\!\rightharpoonup}{\vphantom{a}\smash{\mathbf {#1}}}} \)

    \( \newcommand{\vecs}[1]{\overset { \scriptstyle \rightharpoonup} {\mathbf{#1}} } \)

    \( \newcommand{\vecd}[1]{\overset{-\!-\!\rightharpoonup}{\vphantom{a}\smash {#1}}} \)

    \(\newcommand{\avec}{\mathbf a}\) \(\newcommand{\bvec}{\mathbf b}\) \(\newcommand{\cvec}{\mathbf c}\) \(\newcommand{\dvec}{\mathbf d}\) \(\newcommand{\dtil}{\widetilde{\mathbf d}}\) \(\newcommand{\evec}{\mathbf e}\) \(\newcommand{\fvec}{\mathbf f}\) \(\newcommand{\nvec}{\mathbf n}\) \(\newcommand{\pvec}{\mathbf p}\) \(\newcommand{\qvec}{\mathbf q}\) \(\newcommand{\svec}{\mathbf s}\) \(\newcommand{\tvec}{\mathbf t}\) \(\newcommand{\uvec}{\mathbf u}\) \(\newcommand{\vvec}{\mathbf v}\) \(\newcommand{\wvec}{\mathbf w}\) \(\newcommand{\xvec}{\mathbf x}\) \(\newcommand{\yvec}{\mathbf y}\) \(\newcommand{\zvec}{\mathbf z}\) \(\newcommand{\rvec}{\mathbf r}\) \(\newcommand{\mvec}{\mathbf m}\) \(\newcommand{\zerovec}{\mathbf 0}\) \(\newcommand{\onevec}{\mathbf 1}\) \(\newcommand{\real}{\mathbb R}\) \(\newcommand{\twovec}[2]{\left[\begin{array}{r}#1 \\ #2 \end{array}\right]}\) \(\newcommand{\ctwovec}[2]{\left[\begin{array}{c}#1 \\ #2 \end{array}\right]}\) \(\newcommand{\threevec}[3]{\left[\begin{array}{r}#1 \\ #2 \\ #3 \end{array}\right]}\) \(\newcommand{\cthreevec}[3]{\left[\begin{array}{c}#1 \\ #2 \\ #3 \end{array}\right]}\) \(\newcommand{\fourvec}[4]{\left[\begin{array}{r}#1 \\ #2 \\ #3 \\ #4 \end{array}\right]}\) \(\newcommand{\cfourvec}[4]{\left[\begin{array}{c}#1 \\ #2 \\ #3 \\ #4 \end{array}\right]}\) \(\newcommand{\fivevec}[5]{\left[\begin{array}{r}#1 \\ #2 \\ #3 \\ #4 \\ #5 \\ \end{array}\right]}\) \(\newcommand{\cfivevec}[5]{\left[\begin{array}{c}#1 \\ #2 \\ #3 \\ #4 \\ #5 \\ \end{array}\right]}\) \(\newcommand{\mattwo}[4]{\left[\begin{array}{rr}#1 \amp #2 \\ #3 \amp #4 \\ \end{array}\right]}\) \(\newcommand{\laspan}[1]{\text{Span}\{#1\}}\) \(\newcommand{\bcal}{\cal B}\) \(\newcommand{\ccal}{\cal C}\) \(\newcommand{\scal}{\cal S}\) \(\newcommand{\wcal}{\cal W}\) \(\newcommand{\ecal}{\cal E}\) \(\newcommand{\coords}[2]{\left\{#1\right\}_{#2}}\) \(\newcommand{\gray}[1]{\color{gray}{#1}}\) \(\newcommand{\lgray}[1]{\color{lightgray}{#1}}\) \(\newcommand{\rank}{\operatorname{rank}}\) \(\newcommand{\row}{\text{Row}}\) \(\newcommand{\col}{\text{Col}}\) \(\renewcommand{\row}{\text{Row}}\) \(\newcommand{\nul}{\text{Nul}}\) \(\newcommand{\var}{\text{Var}}\) \(\newcommand{\corr}{\text{corr}}\) \(\newcommand{\len}[1]{\left|#1\right|}\) \(\newcommand{\bbar}{\overline{\bvec}}\) \(\newcommand{\bhat}{\widehat{\bvec}}\) \(\newcommand{\bperp}{\bvec^\perp}\) \(\newcommand{\xhat}{\widehat{\xvec}}\) \(\newcommand{\vhat}{\widehat{\vvec}}\) \(\newcommand{\uhat}{\widehat{\uvec}}\) \(\newcommand{\what}{\widehat{\wvec}}\) \(\newcommand{\Sighat}{\widehat{\Sigma}}\) \(\newcommand{\lt}{<}\) \(\newcommand{\gt}{>}\) \(\newcommand{\amp}{&}\) \(\definecolor{fillinmathshade}{gray}{0.9}\)

    Ahora es el momento de volver atrás y lidiar con lo algo confuso que pasó en la Sección?? cuando intentamos abrir un archivo CSV. Al parecer logramos cargar los datos, pero nos llegó en un formato de aspecto muy extraño. En su momento, le dije que esto era un marco de datos. Ahora mejor explicaré lo que eso significa.

    Introducción de marcos de datos

    Para entender por qué R ha creado esta cosa graciosa llamada marco de datos, ayuda a tratar de ver qué problema resuelve. Entonces volvamos al pequeño escenario que usé al introducir factores en la Sección 4.7. En esa sección registré el grupo y género para los 9 participantes de mi estudio. Supongamos también que grabé sus edades y su partitura en “Dan's Terribly Exciting Psychological Test”:

    age <- c(17, 19, 21, 37, 18, 19, 47, 18, 19)
    score <- c(12, 10, 11, 15, 16, 14, 25, 21, 29)

    Suponiendo que no hay otras variables en el espacio de trabajo, si tecleo who () obtengo esto:

    who()
    
    ##    -- Name --   -- Class --   -- Size --
    ##    age          numeric       9         
    ##    gender       factor        9         
    ##    group        factor        9         
    ##    score        numeric       9

    Por lo que hay cuatro variables en el espacio de trabajo, edad, género, grupo y puntaje. Y da la casualidad de que los cuatro son del mismo tamaño (es decir, todos son vectores con 9 elementos). Aaay da la casualidad de que la edad [1] corresponde a la edad de la primera persona, y el género [1] es el género de esa misma persona, etc. En otras palabras, usted y yo sabemos que las cuatro variables corresponden al mismo conjunto de datos, y las cuatro de se organizan exactamente de la misma manera.

    Sin embargo, ¡R no lo sabe! En lo que a él respecta, no hay razón por la que la variable edad tenga que ser la misma longitud que la variable género; y no hay razón particular para pensar que la edad [1] tiene alguna relación especial con el género [1] más de lo que tiene una relación especial con género [4]. Es decir, cuando almacenamos todo en variables separadas como esta, R no sabe nada sobre las relaciones entre las cosas. Ni siquiera sabe realmente que estas variables realmente se refieren a un conjunto de datos adecuado. El marco de datos corrige esto: si almacenamos nuestras variables dentro de un marco de datos, le estamos diciendo a R que trate estas variables como un conjunto de datos único y bastante coherente.

    Para ver cómo hacen esto, vamos a crear uno. Entonces, ¿cómo creamos un marco de datos? Una forma que ya hemos visto: si importamos nuestros datos desde un archivo CSV, R los almacenará como un marco de datos. Una segunda forma es crearla directamente a partir de algunas variables existentes usando la función data.frame (). Todo lo que tienes que hacer es escribir una lista de variables que quieres incluir en el marco de datos. La salida de un comando data.frame () es, bueno, un marco de datos. Entonces, si quiero almacenar las cuatro variables de mi experimento en un marco de datos llamado expt puedo hacerlo así:

    expt <- data.frame ( age, gender, group, score ) 
    expt 
    
    ##   age gender   group score
    ## 1  17   male group 1    12
    ## 2  19   male group 1    10
    ## 3  21   male group 1    11
    ## 4  37   male group 2    15
    ## 5  18   male group 2    16
    ## 6  19 female group 2    14
    ## 7  47 female group 3    25
    ## 8  18 female group 3    21
    ## 9  19 female group 3    29

    Tenga en cuenta que expt es una variable completamente autónoma. Una vez que lo hayas creado, ya no depende de las variables originales a partir de las cuales se construyó. Es decir, si hacemos cambios a la variable de edad original, no conducirá a ningún cambio en los datos de edad almacenados en expt.

    En este punto, nuestro espacio de trabajo contiene solo una variable, un marco de datos llamado expt. Pero como podemos ver cuando le dijimos a R que imprimiera la variable, este marco de datos contiene 4 variables, cada una de las cuales tiene 9 observaciones. Entonces, ¿cómo sacamos de nuevo esta información? Después de todo, no tiene sentido almacenar información si no la usas, y no hay forma de usar la información si no puedes acceder a ella. Entonces, hablemos un poco sobre cómo sacar información de un marco de datos.

    Lo primero que podríamos querer hacer es sacar una de nuestras variables almacenadas, digamos score. Una cosa que podrías intentar hacer es ignorar el hecho de que la puntuación está bloqueada dentro del marco de datos expt. Por ejemplo, podrías intentar imprimirlo así:

    score
    ## Error in eval(expr, envir, enclos): object 'score' not found
    

    Esto no funciona, porque R no va a “echar un vistazo” dentro del marco de datos a menos que le digas explícitamente que lo haga. En realidad hay una muy buena razón para esto, que voy a explicar en un momento, pero por ahora solo supongamos que R sabe lo que está haciendo. ¿Cómo le decimos a R que mire dentro del marco de datos? Como siempre es el caso con R hay varias formas. La forma más sencilla es usar el operador $ para extraer la variable que te interesa, así:

    expt$score
    ## [1] 12 10 11 15 16 14 25 21 29

    Obtener información sobre un marco de datos

    Un problema que a veces surge en la práctica es que te olvidas de lo que llamaste a todas tus variables. Normalmente podrías intentar escribir objects () o who (), ¡pero ninguno de esos comandos te dirá cuáles son los nombres para esas variables dentro de un marco de datos! Una forma es pedirle a R que te diga cuáles son los nombres de todas las variables almacenadas en el marco de datos, lo que puedes hacer usando la función names ():

    names(expt)
    ## [1] "age"    "gender" "group"  "score"

    Un método alternativo es usar la función who (), siempre y cuando le digas que mire las variables dentro de los marcos de datos. Si estableces expand = TRUE entonces no solo listará las variables en el espacio de trabajo, sino que “expandirá” cualquier marco de datos que tengas en el espacio de trabajo, para que puedas ver cómo se ven. Es decir:

    who(expand = TRUE)
    ##    -- Name --   -- Class --   -- Size --
    ##    expt         data.frame    9 x 4     
    ##     $age        numeric       9         
    ##     $gender     factor        9         
    ##     $group      factor        9         
    ##     $score      numeric       9

    o, dado que expand es el primer argumento en la función who () solo puedes escribir who (TRUE). Eso voy a hacer mucho en este libro.

    ¿Buscas más sobre marcos de datos?

    Hay mucho más que se puede decir sobre los marcos de datos: son bestias bastante complicadas, y cuanto más tiempo uses R, más importante es asegurarte de que realmente las entiendes. Hablaremos mucho más de ellos en el Capítulo 7.


    This page titled 4.8: Marcos de datos is shared under a CC BY-SA 4.0 license and was authored, remixed, and/or curated by Danielle Navarro via source content that was edited to the style and standards of the LibreTexts platform.