R: Method to subselect from a 'fixest_panel'

[.fixest_panel {fixest} | R Documentation

## Method to subselect from a `fixest_panel`

### Description

Subselection from a `fixest_panel` which has been created with the function `panel`. Also allows to create lag/lead variables with functions `l`()/`f`() if the `fixest_panel` is also a `data.table`.

### Usage

    ## S3 method for class 'fixest_panel'
    x[i, j, ...]

### Arguments

`x` | A `fixest_panel` object, created with the function `panel`.
`i` | Row subselection. Allows `data.table` style selection (provided the data is also a data.table).
`j` | Variable selection. Allows `data.table` style selection/variable creation (provided the data is also a data.table).
`...` | Other arguments to be passed to `[.data.frame` or `data.table` (or whatever the class of the initial data).

### Details

If the original data was also a data.table, some calls to `[.fixest_panel` may dissolve the `fixest_panel` object and return a regular data.table. This is the case for subselections with additional arguments. If so, a note is displayed on the console.

### Value

It returns a `fixest_panel` data base, with the attributes allowing to create lags/leads properly bookkeeped.

### Author(s)

Laurent Berge

### See Also

Alternatively, the function `panel` changes a `data.frame` into a panel from which the functions `l` and `f` (creating leads and lags) can be called. Otherwise you can set the panel 'live' during the estimation using the argument `panel.id` (see for example in the function `feols`).

### Examples

    data(base_did)

    # Creating a fixest_panel object
    pdat = panel(base_did, ~id+period)

    # Subselections of fixest_panel objects bookkeeps the leads/lags engine
    pdat_small = pdat[!pdat$period %in% c(2, 4), ]
    a = feols(y~l(x1, 0:1), pdat_small)

    # we obtain the same results, had we created the lags "on the fly"
    base_small = base_did[!base_did$period %in% c(2, 4), ]
    b = feols(y~l(x1, 0:1), base_small, panel.id = ~id+period)
    etable(a, b)

    # Using data.table to create new lead/lag variables
    if(require("data.table")){
      pdat_dt = panel(as.data.table(base_did), ~id+period)

      # Variable creation
      pdat_dt[, x_l1 := l(x1)]
      pdat_dt[, c("x_l1", "x_f1_2") := .(l(x1), f(x1)**2)]

      # Estimation on a subset of the data
      #  (the lead/lags work appropriately)
      feols(y~l(x1, 0:1), pdat_dt[!period %in% c(2, 4)])
    }

[Package fixest version 0.10.0 Index]