R: Matrix / Array from Panel Series

psmat {collapse} | R Documentation

## Matrix / Array from Panel Series

### Description

`psmat` efficiently expands a panel-vector or 'indexed_series' ('pseries') into a matrix. If a data frame or 'indexed_frame' ('pdata.frame') is passed, `psmat` returns a 3D array or a list of matrices.

### Usage

    psmat(x, ...)

    ## Default S3 method:
    psmat(x, g, t = NULL, transpose = FALSE, ...)

    ## S3 method for class 'data.frame'
    psmat(x, by, t = NULL, cols = NULL, transpose = FALSE, array = TRUE, ...)

    # Methods for indexed data / compatibility with plm:

    ## S3 method for class 'pseries'
    psmat(x, transpose = FALSE, drop.index.levels = "none", ...)

    ## S3 method for class 'pdata.frame'
    psmat(x, cols = NULL, transpose = FALSE, array = TRUE, drop.index.levels = "none", ...)

    ## S3 method for class 'psmat'
    plot(x, legend = FALSE, colours = legend, labs = NULL, grid = FALSE, ...)

### Arguments

`x` | a vector, indexed series 'indexed_series' ('pseries'), data frame or 'indexed_frame' ('pdata.frame').
`g` | a factor, `GRP` object, atomic vector (internally converted to factor) or a list of vectors / factors (internally converted to a `GRP` object) used to group `x`. If the panel is balanced an integer indicating the number of groups can also be supplied. See Examples.
`by` | data.frame method: Same input as `g`, but also allows one- or two-sided formulas using the variables in `x`, i.e. `~ idvar` or `var1 + var2 ~ idvar1 + idvar2`.
`t` | same inputs as `g/by`, to indicate the time-variable(s) or second identifier(s). `g` and `t` together should fully identify the panel. If `t = NULL`, the data is assumed sorted and `seq_col` is used to generate rownames for the output matrix.
`cols` | data.frame method: Select columns using a function, column names, indices or a logical vector. Note: `cols` is ignored if a two-sided formula is passed to `by`.
`transpose` | logical. `TRUE` generates the matrix such that `g/by -> columns, t -> rows`. Default is `g/by -> rows, t -> columns`.
`array` | data.frame / pdata.frame methods: logical. `TRUE` returns a 3D array (if just one column is selected a matrix is returned). `FALSE` returns a list of matrices.
`drop.index.levels` | character. Either `"id"`, `"time"`, `"all"` or `"none"`. See indexing.
`...` | arguments to be passed to or from other methods, or for the plot method additional arguments passed to `ts.plot`.
`legend` | logical. Automatically create a legend of panel-groups.
`colours` | either `TRUE` to automatically colour by panel-groups using `rainbow` or a character vector of colours matching the number of panel-groups (series).
`labs` | character. Provide a character-vector of variable labels / series titles when plotting an array.
`grid` | logical. Calls `grid` to draw gridlines on the plot.

### Details

If n > 2 index variables are attached to an indexed series or frame, the first n-1 variables in the index are interacted.

### Value

A matrix or 3D array containing the data in `x`, where by default the rows constitute the groups-ids (`g/by`) and the columns the time variable or individual ids (`t`). 3D arrays contain the variables in the 3rd dimension. The objects have a class 'psmat', and also a 'transpose' attribute indicating whether `transpose = TRUE`.

### Note

The `pdata.frame` method only works for properly subsetted objects of class 'pdata.frame'. A list of 'pseries' won't work. There also exist simple `aperm` and `[` (subset) methods for 'psmat' objects. These differ from the default methods only by keeping the class and the 'transpose' attribute.

### See Also

Time Series and Panel Series, Collapse Overview

### Examples

    ## World Development Panel Data
    head(wlddev)                                                    # View data
    qsu(wlddev, pid = ~ iso3c, cols = 9:12, vlabels = TRUE)         # Sumarizing data
    str(psmat(wlddev$PCGDP, wlddev$iso3c, wlddev$year))             # Generating matrix of GDP
    r <- psmat(wlddev, PCGDP ~ iso3c, ~ year)                       # Same thing using data.frame method
    plot(r, main = vlabels(wlddev)[9], xlab = "Year")               # Plot the matrix
    str(r)                                                          # See srructure
    str(psmat(wlddev$PCGDP, wlddev$iso3c))                          # The Data is sorted, could omit t
    str(psmat(wlddev$PCGDP, 216))                                   # This panel is also balanced, so
    # ..indicating the number of groups would be sufficient to obtain a matrix

    ar <- psmat(wlddev, ~ iso3c, ~ year, 9:12)                      # Get array of transposed matrices
    str(ar)
    plot(ar)
    plot(ar, legend = TRUE)
    plot(psmat(collap(wlddev, ~region+year, cols = 9:12),           # More legible and fancy plot
               ~region, ~year), legend = TRUE,
         labs = vlabels(wlddev)[9:12])

    psml <- psmat(wlddev, ~ iso3c, ~ year, 9:12, array = FALSE)     # This gives list of ps-matrices
    head(unlist2d(psml, "Variable", "Country", id.factor = TRUE),2) # Using unlist2d, can generate DF

    ## Indexing simplifies things
    wldi <- findex_by(wlddev, iso3c, year)  # Creating an indexed frame
    PCGDP <- wldi$PCGDP                     # An indexed_series of GDP per Capita
    head(psmat(PCGDP), 2)                   # Same as above, more parsimonious
    plot(psmat(PCGDP))
    plot(psmat(wldi[9:12]))
    plot(psmat(G(wldi[9:12])))              # Here plotting panel-growth rates

[Package collapse version 1.8.6 Index]