1 Declare panel data object

  • panel_data object class: A modified tibble, which is itself a modified data.frame.

  • Groupwise operations: panel_data frames are grouped by entity, so many operations (e.g., mean(), cumsum()) are performed by dplyr’s mutate()

  • panel_data frames are in “long” format, in which each row is a unique combination of entity and time point.

  • The package includes an example dataset called WageData, which comes from the Panel Study of Income Dynamics.

  • Let’s see the first 14 observations

## Observations: 4,165
## Variables: 14
## $ exp   <dbl> 3, 4, 5, 6, 7, 8, 9, 30, 31, 32, 33, 34, 35, 36, 6, 7, 8, 9, 10…
## $ wks   <dbl> 32, 43, 40, 39, 42, 35, 32, 34, 27, 33, 30, 30, 37, 30, 50, 51,…
## $ occ   <dbl> 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, …
## $ ind   <dbl> 0, 0, 0, 0, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, …
## $ south <dbl> 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, …
## $ smsa  <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, …
## $ ms    <dbl> 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, …
## $ fem   <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, …
## $ union <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, …
## $ ed    <dbl> 9, 9, 9, 9, 9, 9, 9, 11, 11, 11, 11, 11, 11, 11, 12, 12, 12, 12…
## $ blk   <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, …
## $ lwage <dbl> 5.56, 5.72, 6.00, 6.00, 6.06, 6.17, 6.24, 6.16, 6.21, 6.26, 6.5…
## $ t     <dbl> 1, 2, 3, 4, 5, 6, 7, 1, 2, 3, 4, 5, 6, 7, 1, 2, 3, 4, 5, 6, 7, …
## $ id    <dbl> 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, …
  • The key columns are id and t. They indicate which respondent (i) and which time point (t) the row refers to.

  • Let’s convert the data into a panel_data frame.

  • Show the new panel_data dataframe
  • panel_data() needs to know the id and wave columns so that it can protect them (and you) against accidentally being dropped, re-ordered, and so on.

    • It allows other panel data functions in the package to know entity and time indices without you having to state them every time.
  • Note that the wages data are grouped by id and sorted by t within each id. So you can calculate group means and create lagged variables without concerns

  • For more details about the panel_data() function: https://panelr.jacob-long.com/reference/panel_data.html

2 Create new variables

  • Understand what is happening
  • Note that id and t ride along even though we didn’t explicitly ask for them.

3 Describe panel

By default, it provies descriptive statistics for each variable in each year

skim_type skim_variable t n_missing complete_rate numeric.mean numeric.sd numeric.p0 numeric.p25 numeric.p50 numeric.p75 numeric.p100 numeric.hist
numeric union 1 0 1 0.361 0.481 0.00 0.00 0.00 1.00 1.00 ▇▁▁▁▅
numeric union 2 0 1 0.348 0.477 0.00 0.00 0.00 1.00 1.00 ▇▁▁▁▅
numeric union 3 0 1 0.370 0.483 0.00 0.00 0.00 1.00 1.00 ▇▁▁▁▅
numeric union 4 0 1 0.373 0.484 0.00 0.00 0.00 1.00 1.00 ▇▁▁▁▅
numeric union 5 0 1 0.366 0.482 0.00 0.00 0.00 1.00 1.00 ▇▁▁▁▅
numeric union 6 0 1 0.363 0.481 0.00 0.00 0.00 1.00 1.00 ▇▁▁▁▅
numeric union 7 0 1 0.366 0.482 0.00 0.00 0.00 1.00 1.00 ▇▁▁▁▅
numeric lwage 1 0 1 6.375 0.388 5.01 6.12 6.42 6.65 6.91 ▁▂▃▇▇
numeric lwage 2 0 1 6.465 0.363 5.01 6.24 6.53 6.75 6.91 ▁▁▂▅▇
numeric lwage 3 0 1 6.597 0.447 4.61 6.33 6.61 6.86 8.27 ▁▂▇▃▁
numeric lwage 4 0 1 6.696 0.441 5.08 6.44 6.71 6.96 8.52 ▁▃▇▂▁
numeric lwage 5 0 1 6.786 0.424 5.27 6.51 6.80 7.04 8.10 ▁▂▇▅▁
numeric lwage 6 0 1 6.864 0.424 5.66 6.60 6.91 7.11 8.16 ▁▃▇▃▁
numeric lwage 7 0 1 6.951 0.438 5.68 6.68 6.99 7.21 8.54 ▁▅▇▂▁

4 Plot panel

4.2 Isolate time series of specific entities

  • Import stata datset about exchange rates across countries and over time
  • Declare panel dataset
  • Plot all trends

  • Plot G7 countries by using subset.ids = filter(penn, g7 == 1)$country,

  • Fit a non-linear trend

5 Re-shape panel

5.1 From long to wide

  • Here is a long panel dataset stored as panel_data object
  • Widen the data, which will leave us with one row for each id and a row for each t
## Observations: 595
## Variables: 89
## $ id           <fct> 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 1…
## $ fem          <dbl> 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0,…
## $ ed           <dbl> 9, 11, 12, 10, 16, 12, 12, 10, 16, 16, 12, 12, 12, 17, 1…
## $ blk          <dbl> 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0,…
## $ wks_mean     <dbl> 37.6, 31.6, 50.4, 47.9, 47.0, 45.9, 47.3, 49.6, 48.0, 43…
## $ exp_1        <dbl> 3, 30, 6, 31, 10, 26, 15, 23, 3, 3, 24, 21, 26, 15, 9, 1…
## $ wks_1        <dbl> 32, 34, 50, 52, 50, 44, 46, 51, 50, 49, 47, 47, 48, 45, …
## $ occ_1        <dbl> 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 0, 0, 1, 0, 0, 1,…
## $ ind_1        <dbl> 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1,…
## $ south_1      <dbl> 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 1, 1, 0, 1, 0, 1, 0,…
## $ smsa_1       <dbl> 0, 0, 0, 1, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 1,…
## $ ms_1         <dbl> 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 0, 0, 1, 1, 1,…
## $ union_1      <dbl> 0, 0, 1, 0, 1, 0, 1, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1,…
## $ lwage_1      <dbl> 5.56, 6.16, 5.65, 6.16, 6.44, 6.91, 6.13, 6.33, 6.55, 6.…
## $ wks_lag_1    <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, …
## $ wage_1       <dbl> 260, 475, 285, 472, 625, 998, 461, 562, 700, 600, 779, 7…
## $ cumu_wages_1 <dbl> 260, 475, 285, 472, 625, 998, 461, 562, 700, 600, 779, 7…
## $ exp_2        <dbl> 4, 31, 7, 32, 11, 27, 16, 24, 4, 4, 25, 22, 27, 16, 10, …
## $ wks_2        <dbl> 43, 27, 51, 46, 46, 47, 48, 50, 48, 47, 48, 46, 48, 45, …
## $ occ_2        <dbl> 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 0, 0, 1, 0, 0, 1,…
## $ ind_2        <dbl> 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1,…
## $ south_2      <dbl> 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 1, 1, 0, 1, 0, 1, 0,…
## $ smsa_2       <dbl> 0, 0, 0, 1, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 1,…
## $ ms_2         <dbl> 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 0, 0, 1, 1, 1,…
## $ union_2      <dbl> 0, 0, 1, 0, 1, 0, 1, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1,…
## $ lwage_2      <dbl> 5.72, 6.21, 6.44, 6.24, 6.62, 6.91, 6.17, 6.40, 6.55, 6.…
## $ wks_lag_2    <dbl> 32, 34, 50, 52, 50, 44, 46, 51, 50, 49, 47, 47, 48, 45, …
## $ wage_2       <dbl> 305, 500, 624, 512, 750, 998, 480, 604, 700, 625, 834, 7…
## $ cumu_wages_2 <dbl> 565, 975, 909, 984, 1375, 1996, 941, 1166, 1400, 1225, 1…
## $ exp_3        <dbl> 5, 32, 8, 33, 12, 28, 17, 25, 5, 5, 26, 23, 28, 17, 11, …
## $ wks_3        <dbl> 40, 33, 50, 46, 40, 47, 49, 50, 50, 46, 45, 47, 50, 45, …
## $ occ_3        <dbl> 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 0, 0, 1, 0, 0, 1,…
## $ ind_3        <dbl> 0, 1, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1,…
## $ south_3      <dbl> 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 1, 1, 0, 1, 0, 1, 0,…
## $ smsa_3       <dbl> 0, 0, 0, 1, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 1,…
## $ ms_3         <dbl> 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 0, 0, 1, 1, 1,…
## $ union_3      <dbl> 0, 1, 1, 0, 1, 0, 1, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1,…
## $ lwage_3      <dbl> 6.00, 6.26, 6.55, 6.30, 6.63, 6.91, 6.21, 6.54, 6.80, 6.…
## $ wks_lag_3    <dbl> 43, 27, 51, 46, 46, 47, 48, 50, 48, 47, 48, 46, 48, 45, …
## $ wage_3       <dbl> 402, 525, 698, 545, 760, 1000, 499, 695, 900, 625, 900, …
## $ cumu_wages_3 <dbl> 967, 1500, 1607, 1529, 2135, 2996, 1440, 1861, 2300, 185…
## $ exp_4        <dbl> 6, 33, 9, 34, 13, 29, 18, 26, 6, 6, 27, 24, 29, 18, 12, …
## $ wks_4        <dbl> 39, 30, 52, 49, 50, 47, 46, 50, 48, 44, 45, 47, 48, 44, …
## $ occ_4        <dbl> 0, 1, 1, 1, 0, 1, 1, 1, 0, 0, 1, 1, 1, 0, 0, 1, 0, 0, 1,…
## $ ind_4        <dbl> 0, 1, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1,…
## $ south_4      <dbl> 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 1, 1, 0, 1, 0, 1, 0,…
## $ smsa_4       <dbl> 0, 0, 0, 1, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 1,…
## $ ms_4         <dbl> 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1,…
## $ union_4      <dbl> 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1,…
## $ lwage_4      <dbl> 6.00, 6.54, 6.60, 6.36, 6.98, 7.00, 6.31, 6.56, 6.91, 6.…
## $ wks_lag_4    <dbl> 40, 33, 50, 46, 40, 47, 49, 50, 50, 46, 45, 47, 50, 45, …
## $ wage_4       <dbl> 402, 695, 737, 578, 1078, 1100, 552, 708, 1000, 625, 100…
## $ cumu_wages_4 <dbl> 1369, 2195, 2344, 2107, 3213, 4096, 1992, 2569, 3300, 24…
## $ exp_5        <dbl> 7, 34, 10, 35, 14, 30, 19, 27, 7, 7, 28, 25, 30, 19, 13,…
## $ wks_5        <dbl> 42, 30, 52, 44, 47, 44, 47, 44, 48, 43, 47, 47, 48, 44, …
## $ occ_5        <dbl> 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 0, 0, 1, 0, 0, 1,…
## $ ind_5        <dbl> 1, 1, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1,…
## $ south_5      <dbl> 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 1, 1, 0, 1, 0, 1, 0,…
## $ smsa_5       <dbl> 0, 0, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 1,…
## $ ms_5         <dbl> 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1,…
## $ union_5      <dbl> 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1,…
## $ lwage_5      <dbl> 6.06, 6.70, 6.70, 6.47, 7.05, 7.07, 6.38, 6.59, 7.09, 6.…
## $ wks_lag_5    <dbl> 39, 30, 52, 49, 50, 47, 46, 50, 48, 44, 45, 47, 48, 44, …
## $ wage_5       <dbl> 429, 810, 809, 645, 1150, 1175, 587, 729, 1200, 680, 114…
## $ cumu_wages_5 <dbl> 1798, 3005, 3153, 2752, 4363, 5271, 2579, 3298, 4500, 31…
## $ exp_6        <dbl> 8, 35, 11, 36, 15, 31, 20, 28, 8, 8, 29, 26, 31, 20, 14,…
## $ wks_6        <dbl> 35, 37, 52, 52, 47, 45, 47, 51, 44, 34, 17, 47, 46, 44, …
## $ occ_6        <dbl> 0, 1, 1, 1, 0, 1, 1, 1, 0, 0, 1, 1, 0, 0, 0, 1, 0, 0, 1,…
## $ ind_6        <dbl> 1, 1, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1,…
## $ south_6      <dbl> 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 1, 1, 0, 1, 0, 1, 0,…
## $ smsa_6       <dbl> 0, 0, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 1,…
## $ ms_6         <dbl> 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1,…
## $ union_6      <dbl> 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1,…
## $ lwage_6      <dbl> 6.17, 6.79, 6.78, 6.56, 7.31, 7.52, 6.45, 6.82, 7.17, 6.…
## $ wks_lag_6    <dbl> 42, 30, 52, 44, 47, 44, 47, 44, 48, 43, 47, 47, 48, 44, …
## $ wage_6       <dbl> 480, 890, 879, 708, 1500, 1845, 630, 914, 1300, 745, 124…
## $ cumu_wages_6 <dbl> 2278, 3895, 4032, 3460, 5863, 7116, 3209, 4212, 5800, 39…
## $ exp_7        <dbl> 9, 36, 12, 37, 16, 32, 21, 29, 9, 9, 30, 27, 32, 21, 15,…
## $ wks_7        <dbl> 32, 30, 46, 46, 49, 47, 48, 51, 48, 40, 47, 46, 46, 44, …
## $ occ_7        <dbl> 0, 1, 1, 1, 0, 1, 1, 1, 0, 0, 1, 1, 1, 0, 0, 1, 0, 0, 1,…
## $ ind_7        <dbl> 1, 1, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1,…
## $ south_7      <dbl> 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 1, 1, 0, 1, 0, 1, 0,…
## $ smsa_7       <dbl> 0, 0, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 1,…
## $ ms_7         <dbl> 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1,…
## $ union_7      <dbl> 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1,…
## $ lwage_7      <dbl> 6.24, 6.82, 6.86, 6.62, 7.30, 7.34, 6.52, 6.89, 7.21, 6.…
## $ wks_lag_7    <dbl> 35, 37, 52, 52, 47, 45, 47, 51, 44, 34, 17, 47, 46, 44, …
## $ wage_7       <dbl> 515, 912, 954, 751, 1474, 1539, 680, 984, 1350, 845, 140…
## $ cumu_wages_7 <dbl> 2793, 4807, 4986, 4211, 7337, 8655, 3889, 5196, 7150, 47…

5.2 From wide to long

  • Is is importnat to know how many waves there are, which variables change over time, and how the time-varying variables are labeled.

  • Let’s load a wide dataset

## Observations: 1,151
## Variables: 28
## $ id        <dbl> 22, 75, 92, 96, 141, 161, 220, 229, 236, 240, 245, 249, 255…
## $ pov1      <dbl> 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0,…
## $ mother1   <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0,…
## $ spouse1   <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,…
## $ inschool1 <dbl> 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1,…
## $ hours1    <dbl> 21, 8, 30, 19, 0, 0, 6, 0, 0, 18, 0, 0, 0, 12, 0, 19, 25, 2…
## $ pov2      <dbl> 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 1, 1, 0, 0, 1, 0, 0, 1, 0,…
## $ mother2   <dbl> 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0,…
## $ spouse2   <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0,…
## $ inschool2 <dbl> 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 0, 1, 0,…
## $ hours2    <dbl> 15, 0, 27, 54, 6, 15, 8, 32, 20, 0, 0, 0, 23, 0, 0, 20, 30,…
## $ pov3      <dbl> 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0,…
## $ mother3   <dbl> 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1,…
## $ spouse3   <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0,…
## $ inschool3 <dbl> 1, 1, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0,…
## $ hours3    <dbl> 3, 0, 24, 0, 0, 37, 6, 0, 0, 0, 0, 30, 23, 0, 0, 0, 20, 55,…
## $ pov4      <dbl> 0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, 1,…
## $ mother4   <dbl> 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 1,…
## $ spouse4   <dbl> 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0,…
## $ inschool4 <dbl> 1, 1, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0,…
## $ hours4    <dbl> 0, 4, 31, 26, 0, 0, 12, 15, 40, 85, 0, 0, 58, 0, 0, 27, 38,…
## $ age       <dbl> 16, 17, 16, 17, 16, 17, 17, 16, 17, 16, 16, 16, 16, 17, 16,…
## $ black     <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0,…
## $ pov5      <dbl> 0, 1, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,…
## $ mother5   <dbl> 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 1, 0, 1,…
## $ spouse5   <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0,…
## $ inschool5 <dbl> 1, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0,…
## $ hours5    <dbl> 0, 0, 0, 36, 0, 0, 0, 20, 40, 90, 27, 0, 25, 12, 0, 46, 0, …
  • The long_panel() needs to know what the waves are called (1, 2, 3, …), where the wave label is in the variable name (beginning or end), and whether the label has prefixes or suffixes (e.g., “W1_variable” has a “W” prefix and “_” suffix).

  • We have no prefix/suffix, the label is at the end, and the labels go from 1 to 5.

7 Run it in Rcloud

END

LS0tCnRpdGxlOiAicGFuZWxyOiBXcmFuZ2xpbmcgYW5kIHBsb3R0aW5nIHBhbmVsIGRhdGEiCnN1YnRpdGxlOiAiTGVhcm5pbmcgaG93IHRvIHVzZSB0aGUgcGFja2FnZSIKYXV0aG9yOiAiIgpvdXRwdXQ6CiAgaHRtbF9kb2N1bWVudDoKICAgIGNvZGVfZG93bmxvYWQ6IHRydWUKICAgIGRmX3ByaW50OiBwYWdlZAogICAgdG9jOiB0cnVlCiAgICB0b2NfZmxvYXQ6CiAgICAgIGNvbGxhcHNlZDogZmFsc2UKICAgICAgc21vb3RoX3Njcm9sbDogZmFsc2UKICAgIHRvY19kZXB0aDogNAogICAgbnVtYmVyX3NlY3Rpb25zOiB0cnVlCiAgICBjb2RlX2ZvbGRpbmc6ICJzaG93IgogICAgdGhlbWU6ICJjb3NtbyIKICAgIGhpZ2hsaWdodDogIm1vbm9jaHJvbWUiCiAgaHRtbF9ub3RlYm9vazoKICAgIGNvZGVfZm9sZGluZzogc2hvdwogICAgaGlnaGxpZ2h0OiBtb25vY2hyb21lCiAgICBudW1iZXJfc2VjdGlvbnM6IHllcwogICAgdGhlbWU6IGNvc21vCiAgICB0b2M6IHllcwogICAgdG9jX2RlcHRoOiA0CiAgICB0b2NfZmxvYXQ6CiAgICAgIGNvbGxhcHNlZDogbm8KICAgICAgc21vb3RoX3Njcm9sbDogbm8KICBwZGZfZG9jdW1lbnQ6IGRlZmF1bHQKICB3b3JkX2RvY3VtZW50OiBkZWZhdWx0CiAgZ2l0aHViX2RvY3VtZW50OiBkZWZhdWx0Ci0tLQoKPHN0eWxlPgpoMS50aXRsZSB7Zm9udC1zaXplOiAxOHB0OyBjb2xvcjogRGFya0JsdWU7fSAKYm9keSwgaDEsIGgyLCBoMywgaDQge2ZvbnQtZmFtaWx5OiAiUGFsYXRpbm8iLCBzZXJpZjt9CmJvZHkge2ZvbnQtc2l6ZTogMTJwdDt9Ci8qIEhlYWRlcnMgKi8KaDEsaDIsaDMsaDQsaDUsaDZ7Zm9udC1zaXplOiAxNHB0OyBjb2xvcjogIzAwMDA4Qjt9CmJvZHkge2NvbG9yOiAjMzMzMzMzO30KYSwgYTpob3ZlciB7Y29sb3I6ICM4QjNBNjI7fQpwcmUge2ZvbnQtc2l6ZTogMTJweDt9Cjwvc3R5bGU+CgoKYGBge3Igc2V0dXAsIGluY2x1ZGU9Rn0Ka25pdHI6Om9wdHNfY2h1bmskc2V0KAogIGVjaG8gPSBUUlVFLAogIG1lc3NhZ2UgPSBGQUxTRSwKICB3YXJuaW5nID0gRkFMU0UKKQpsaWJyYXJ5KHRpZHl2ZXJzZSkKbGlicmFyeShEVCkgICAgICAgICAgICAjIGludGVyYWN0aXZlIHRhYmxlcwpsaWJyYXJ5KGthYmxlRXh0cmEpICAgICMgbmljZXIgdGFibGVzCgpsaWJyYXJ5KHBhbmVscikgICAgICAgICMgd3JhbmdsaW5nIGFuZCBwbG90dGluZyBwYW5lbCBkYXRhCmxpYnJhcnkoc2tpbXIpICAgICAgICAgIyBDb21wYWN0IGFuZCBGbGV4aWJsZSBTdW1tYXJpZXMgb2YgRGF0YQpsaWJyYXJ5KHJsYW5nKSAgICAgICAgICMgRnVuY3Rpb25zIGZvciBCYXNlIFR5cGVzIGFuZCBDb3JlIFIgYW5kICdUaWR5dmVyc2UnIEZlYXR1cmVzCmxpYnJhcnkocmlvKSAgICAgICAgICAgIyBJbXBvcnQgJ1N0YXRhJyBmaWxlcyBGaWxlcwoKCmxpYnJhcnkobUZpbHRlcikKCiMgQ2hhbmdlIHRoZSBwcmVzZW50YXRpb24gb2YgZGVjaW1hbCBudW1iZXJzIHRvIDQgYW5kIGF2b2lkIHNjaWVudGlmaWMgbm90YXRpb24Kb3B0aW9ucyhwcm9tcHQ9IlI+ICIsIGRpZ2l0cz0zLCBzY2lwZW49OTk5KQpgYGAKCgoKIyBEZWNsYXJlIHBhbmVsIGRhdGEgb2JqZWN0CgotIGBwYW5lbF9kYXRhYCBvYmplY3QgY2xhc3M6IEEgbW9kaWZpZWQgdGliYmxlLCB3aGljaCBpcyBpdHNlbGYgYSBtb2RpZmllZCBkYXRhLmZyYW1lLiAKCi0gR3JvdXB3aXNlIG9wZXJhdGlvbnM6IGBwYW5lbF9kYXRhYCBmcmFtZXMgYXJlIGdyb3VwZWQgYnkgZW50aXR5LCBzbyBtYW55IG9wZXJhdGlvbnMgKGUuZy4sIG1lYW4oKSwgY3Vtc3VtKCkpIGFyZSBwZXJmb3JtZWQgYnkgZHBseXIncyBgbXV0YXRlKClgCgotIGBwYW5lbF9kYXRhYCBmcmFtZXMgYXJlIGluIOKAnGxvbmfigJ0gZm9ybWF0LCBpbiB3aGljaCBlYWNoIHJvdyBpcyBhIHVuaXF1ZSBjb21iaW5hdGlvbiBvZiBlbnRpdHkgYW5kIHRpbWUgcG9pbnQuCgoKLSBUaGUgcGFja2FnZSBpbmNsdWRlcyBhbiBleGFtcGxlIGRhdGFzZXQgY2FsbGVkIGBXYWdlRGF0YWAsIHdoaWNoIGNvbWVzIGZyb20gdGhlIFBhbmVsIFN0dWR5IG9mIEluY29tZSBEeW5hbWljcy4gCgotIExldCdzIHNlZSB0aGUgZmlyc3QgMTQgb2JzZXJ2YXRpb25zCgpgYGB7cn0KZGF0YSgiV2FnZURhdGEiKQpnbGltcHNlKFdhZ2VEYXRhKQpgYGAKCi0gVGhlIGtleSBjb2x1bW5zIGFyZSBgaWRgIGFuZCBgdGAuIFRoZXkgaW5kaWNhdGUgd2hpY2ggcmVzcG9uZGVudCAoYGlgKSBhbmQgd2hpY2ggdGltZSBwb2ludCAoYHRgKSB0aGUgcm93IHJlZmVycyB0by4KCi0gTGV0J3MgY29udmVydCB0aGUgZGF0YSBpbnRvIGEgYHBhbmVsX2RhdGFgIGZyYW1lLgoKCmBgYHtyfQp3YWdlcyA8LSBwYW5lbF9kYXRhKFdhZ2VEYXRhLCBpZCA9IGlkLCB3YXZlID0gdCkKYGBgCgotIFNob3cgdGhlIG5ldyBgcGFuZWxfZGF0YWAgZGF0YWZyYW1lCgpgYGB7cn0Kd2FnZXMKYGBgCgoKLSBgcGFuZWxfZGF0YSgpYCBuZWVkcyB0byBrbm93IHRoZSBgaWRgIGFuZCBgd2F2ZWAgY29sdW1ucyBzbyB0aGF0IGl0IGNhbiBwcm90ZWN0IHRoZW0gKGFuZCB5b3UpIGFnYWluc3QgYWNjaWRlbnRhbGx5IGJlaW5nIGRyb3BwZWQsIHJlLW9yZGVyZWQsIGFuZCBzbyBvbi4KCiAgICAtIEl0IGFsbG93cyBvdGhlciBwYW5lbCBkYXRhIGZ1bmN0aW9ucyBpbiB0aGUgcGFja2FnZSB0byBrbm93IGVudGl0eSBhbmQgdGltZSBpbmRpY2VzIHdpdGhvdXQgeW91IGhhdmluZyB0byBzdGF0ZSB0aGVtIGV2ZXJ5IHRpbWUuCgotIE5vdGUgdGhhdCB0aGUgYHdhZ2VzYCBkYXRhIGFyZSBncm91cGVkIGJ5IGBpZGAgYW5kIHNvcnRlZCBieSBgdGAgd2l0aGluIGVhY2ggYGlkYC4gU28geW91IGNhbiBjYWxjdWxhdGUgZ3JvdXAgbWVhbnMgYW5kIGNyZWF0ZSBsYWdnZWQgdmFyaWFibGVzIHdpdGhvdXQgY29uY2VybnMKCi0gRm9yIG1vcmUgZGV0YWlscyBhYm91dCB0aGUgYHBhbmVsX2RhdGEoKWAgZnVuY3Rpb246IDxodHRwczovL3BhbmVsci5qYWNvYi1sb25nLmNvbS9yZWZlcmVuY2UvcGFuZWxfZGF0YS5odG1sPgoKCgojIENyZWF0ZSBuZXcgdmFyaWFibGVzCgpgYGB7cn0Kd2FnZXMgPC0gd2FnZXMgJT4lIAogIG11dGF0ZSgKICAgIHdrc19tZWFuID0gbWVhbih3a3MpLCAgIyB0aGlzIGlzIHRoZSBwZXJzb24tbGV2ZWwgbWVhbiAoYmFzZWQgb24gdGhlIHRpbWUgdmFyaWF0aW9uKQogICAgd2tzX2xhZyA9IGxhZyh3a3MpLCAgICAjIHRoaXMgd2lsbCBoYXZlIGEgdmFsdWUgb2YgTkEgd2hlbiB0ID0gMQogICAgd2FnZSA9ICAgZXhwKGx3YWdlKSwgICMgIHRoZSB0aGUgYW50aSBsb2cgICAKICAgIGN1bXVfd2FnZXMgPSBjdW1zdW0oZXhwKGx3YWdlKSkgIyBjdW11bGF0aXZlIHN1bW1hdGlvbiB3b3JrcyB3aXRoaW4gcGVyc29uCiAgICAgICAgICkgCmBgYAoKCi0gVW5kZXJzdGFuZCAgd2hhdCBpcyBoYXBwZW5pbmcKCmBgYHtyfQp3YWdlcyAlPiUgCiAgc2VsZWN0KHdrcywgd2tzX21lYW4sIHdrc19sYWcsIHdhZ2UsIGN1bXVfd2FnZXMpIApgYGAKCgotIE5vdGUgdGhhdCBgaWRgIGFuZCBgdGAgcmlkZSBhbG9uZyBldmVuIHRob3VnaCB3ZSBkaWRuJ3QgZXhwbGljaXRseSBhc2sgZm9yIHRoZW0uCgojIERlc2NyaWJlIHBhbmVsCgpCeSBkZWZhdWx0LCBpdCBwcm92aWVzIGRlc2NyaXB0aXZlIHN0YXRpc3RpY3MgZm9yIGVhY2ggdmFyaWFibGUgaW4gZWFjaCB5ZWFyCgoKYGBge3J9CmRlc2NyaWJlX3BhbmVsX2J5X3llYXIgIDwtIHN1bW1hcnkod2FnZXMsIHVuaW9uLCBsd2FnZSkKZGVzY3JpYmVfcGFuZWxfYnlfeWVhciAlPiUgCiAga2FibGUoKSAlPiUKICBrYWJsZV9zdHlsaW5nKCkKYGBgCgoKCgotIFN0b3AgZ2V0dGluZyBwZXIteWVhciBzdGF0aXN0aWNzIGJ5IHNldHRpbmcgIGBieS53YXZlID0gRkFMU0VgCgotIEZvciBkYXRhc2V0IHdpdGggZmV3IGVudGl0aWVzLCBwZXItZW50aXR5IHN0YXRpc3RpY3MgY2FuIGJlIG9idGFpbmVkICBieSBzZXR0aW5nIGBieS53YXZlID0gRkFMU0VgIGFuZCBgYnkuaWQgPSBUUlVFLmAKCi0gRm9yIGZ1cnRoZSBkZXRhaWxzLCBzZWUgdGhlIGRvY3VtZW50aW8gb2YgdGhlIGZ1bmN0aW9uOiA8aHR0cHM6Ly9wYW5lbHIuamFjb2ItbG9uZy5jb20vcmVmZXJlbmNlL3N1bW1hcnkucGFuZWxfZGF0YS5odG1sPgoKCgoKIyBQbG90IHBhbmVsCgoKIyMgVGltZSBzZXJpZXMgd2l0aCBvdmVyYWxsIHRyZW5kCgotICBUaGUgdHJlbmQgb2YgbG9nIHdhZ2VzCgpgYGB7cn0Kd2FnZXMgJT4lIApsaW5lX3Bsb3QobHdhZ2UsIAogICAgICAgICAgYWRkLm1lYW4gPSBUUlVFLCAKICAgICAgICAgIGFscGhhID0gMC4yKQpgYGAKCgotIFBsb3QgYSBub24tbGluZWFyIHRyZW5kCgpgYGB7cn0Kd2FnZXMgJT4lIApsaW5lX3Bsb3QobHdhZ2UsIAogICAgICAgICAgYWRkLm1lYW4gPSBUUlVFLAogICAgICAgICAgbWVhbi5mdW5jdGlvbiA9ICJsb2VzcyIsCiAgICAgICAgICBhbHBoYSA9IDAuMikKYGBgCgoKCgojIyBJc29sYXRlIHRpbWUgc2VyaWVzIG9mIHNwZWNpZmljIGVudGl0aWVzCgoKLSBJbXBvcnQgc3RhdGEgZGF0c2V0IGFib3V0IGV4Y2hhbmdlIHJhdGVzIGFjcm9zcyBjb3VudHJpZXMgYW5kIG92ZXIgdGltZQoKCmBgYHtyfQpwZW5uIDwtIGltcG9ydCgiaHR0cDovL3d3dy5zdGF0YS1wcmVzcy5jb20vZGF0YS9yMTMvcGVubnhyYXRlLmR0YSIpCmhlYWQocGVubikKYGBgCgoKLSBEZWNsYXJlIHBhbmVsIGRhdGFzZXQKCmBgYHtyfQpwZW5uIDwtIHBhbmVsX2RhdGEocGVubiwgaWQgPSBjb3VudHJ5LCB3YXZlID0geWVhcikKcGVubgpgYGAKCgotIFBsb3QgYWxsIHRyZW5kcwoKYGBge3J9CnBlbm4gJT4lIApsaW5lX3Bsb3QocmVhbHhyYXRlKQpgYGAKCgotIFBsb3QgRzcgY291bnRyaWVzIGJ5IHVzaW5nIGBzdWJzZXQuaWRzID0gZmlsdGVyKHBlbm4sIGc3ID09IDEpJGNvdW50cnksYAoKYGBge3J9CnBlbm4gJT4lIAogIGxpbmVfcGxvdChyZWFseHJhdGUsIAogICAgICAgICAgICBvdmVybGF5ID0gRkFMU0UsCiAgICAgICAgICAgIHN1YnNldC5pZHMgPSBmaWx0ZXIocGVubiwgZzcgPT0gMSkkY291bnRyeSwgCiAgICAgICAgICAgIGFkZC5tZWFuID0gVFJVRSkKYGBgCgoKCi0gRml0IGEgbm9uLWxpbmVhciB0cmVuZAoKCmBgYHtyfQpwZW5uICU+JSAKICBsaW5lX3Bsb3QocmVhbHhyYXRlLCAKICAgICAgICAgICAgb3ZlcmxheSA9IEZBTFNFLAogICAgICAgICAgICBzdWJzZXQuaWRzID0gZmlsdGVyKHBlbm4sIGc3ID09IDEpJGNvdW50cnksIAogICAgICAgICAgICBhZGQubWVhbiA9IFRSVUUsCiAgICAgICAgICAgIG1lYW4uZnVuY3Rpb24gPSAibG9lc3MiCiAgICAgICAgICAgICkKYGBgCgoKCi0gRm9yIGZ1cnRoZXIgZGV0YWlscywgc2VlIHRoZSBkb2N1bWVudGlvbiBvZiB0aGUgZnVuY3Rpb246IDxodHRwczovL3BhbmVsci5qYWNvYi1sb25nLmNvbS9yZWZlcmVuY2UvbGluZV9wbG90Lmh0bWw+CgoKCiMgUmUtc2hhcGUgcGFuZWwKCi0gRm9yIGZ1cnRoZXIgZGV0YWlscywgc2VlIHRoZSBmb2xsb3dpbmcgdmlnbmV0dGU6IDxodHRwczovL3BhbmVsci5qYWNvYi1sb25nLmNvbS9hcnRpY2xlcy9yZXNoYXBlLmh0bWw+CgojIyBGcm9tIGxvbmcgdG8gd2lkZQoKCi0gSGVyZSBpcyBhIGxvbmcgcGFuZWwgZGF0YXNldCBzdG9yZWQgYXMgYHBhbmVsX2RhdGFgIG9iamVjdAoKYGBge3J9CndhZ2VzIApgYGAKCgotIFdpZGVuIHRoZSBkYXRhLCB3aGljaCB3aWxsIGxlYXZlIHVzIHdpdGggb25lIHJvdyBmb3IgZWFjaCBgaWRgIGFuZCBhIHJvdyBmb3IgZWFjaCBgdGAKCgpgYGB7cn0Kd2lkZW5QYW5lbCA8LSB3aWRlbl9wYW5lbCh3YWdlcykKd2lkZW5QYW5lbApgYGAKCgpgYGB7cn0KZ2xpbXBzZSh3aWRlblBhbmVsKQpgYGAKCgoKCi0gRm9yIGZ1cnRoZXIgZGV0YWlscywgc2VlIHRoZSBkb2N1bWVudGlvbiBvZiB0aGUgZnVuY3Rpb246ICA8aHR0cHM6Ly9wYW5lbHIuamFjb2ItbG9uZy5jb20vcmVmZXJlbmNlL3dpZGVuX3BhbmVsLmh0bWw+CgoKCiMjIEZyb20gd2lkZSB0byBsb25nCgoKLSBJcyBpcyBpbXBvcnRuYXQgdG8ga25vdyBob3cgbWFueSB3YXZlcyB0aGVyZSBhcmUsIHdoaWNoIHZhcmlhYmxlcyBjaGFuZ2Ugb3ZlciB0aW1lLCBhbmQgaG93IHRoZSB0aW1lLXZhcnlpbmcgdmFyaWFibGVzIGFyZSBsYWJlbGVkLgoKCi0gTGV0J3MgbG9hZCBhIHdpZGUgZGF0YXNldAoKYGBge3J9CmRhdGEoInRlZW5fcG92ZXJ0eSIpCmdsaW1wc2UodGVlbl9wb3ZlcnR5KSAKYGBgCgoKLSBUaGUgYGxvbmdfcGFuZWwoKWAgbmVlZHMgdG8ga25vdyB3aGF0IHRoZSB3YXZlcyBhcmUgY2FsbGVkICgxLCAyLCAzLCDigKYpLCB3aGVyZSB0aGUgd2F2ZSBsYWJlbCBpcyBpbiB0aGUgdmFyaWFibGUgbmFtZSAoYmVnaW5uaW5nIG9yIGVuZCksIGFuZCB3aGV0aGVyIHRoZSBsYWJlbCBoYXMgcHJlZml4ZXMgb3Igc3VmZml4ZXMgKGUuZy4sIOKAnFcxX3ZhcmlhYmxl4oCdIGhhcyBhIOKAnFfigJ0gcHJlZml4IGFuZCDigJxf4oCdIHN1ZmZpeCkuIAoKLSBXZSBoYXZlIG5vIHByZWZpeC9zdWZmaXgsIHRoZSBsYWJlbCBpcyBhdCB0aGUgZW5kLCBhbmQgdGhlIGxhYmVscyBnbyBmcm9tIDEgdG8gNS4KCgpgYGB7cn0KdGVlbl9wb3ZlcnR5ICU+JSAKICBsb25nX3BhbmVsKAogICAgbGFiZWxfbG9jYXRpb24gPSAiZW5kIiwgCiAgICBwZXJpb2RzID0gMTo1CiAgICApCmBgYAoKCgotIEZvciBmdXJ0aGVyIGRldGFpbHMsIHNlZSB0aGUgZG9jdW1lbnRpb24gb2YgdGhlIGZ1bmN0aW9uOiA8aHR0cHM6Ly9wYW5lbHIuamFjb2ItbG9uZy5jb20vcmVmZXJlbmNlL2xvbmdfcGFuZWwuaHRtbD4gCgoKCiMgUmVmZXJlbmNlcwoKIC0gPGh0dHBzOi8vamFjb2ItbG9uZy5jb20vcG9zdC9wYW5lbHItaW50cm8vPgogCiAtIDxodHRwczovL3BhbmVsci5qYWNvYi1sb25nLmNvbS9yZWZlcmVuY2UvaW5kZXguaHRtbD4KIAogLSA8aHR0cHM6Ly9jcmFuLnItcHJvamVjdC5vcmcvd2ViL3BhY2thZ2VzL3BhbmVsci9pbmRleC5odG1sPgoKCiMgUnVuIGl0IGluIFJjbG91ZAoKLSA8aHR0cHM6Ly9yc3R1ZGlvLmNsb3VkL3Byb2plY3QvODQ5MDMzPgoKCkVORAoKCgoK