To create your first PX-file with pxmake, you can either start with an existing PX-file, or use a data set.
All workflows in pxmake, starts the same way: by using the
px() to create a px object. Here we are using the
built in dataset population_gl.
library(pxmake)
population_gl |>
  head(10) |>
  print()
#> # A tibble: 10 × 4
#>    gender age   year      n
#>    <fct>  <chr> <chr> <dbl>
#>  1 male   0-6   2004   3237
#>  2 male   0-6   2014   2950
#>  3 male   0-6   2024   2769
#>  4 male   7-16  2004   5085
#>  5 male   7-16  2014   4040
#>  6 male   7-16  2024   3865
#>  7 male   17-24 2004   3191
#>  8 male   17-24 2014   3614
#>  9 male   17-24 2024   2940
#> 10 male   25-64 2004  17328To create the px object, simply pass the data set to the
px() function.
x is now a px object. The word object just
means that the PX-file is stored in a specific format that all functions
in the pxmake package uses.
Use px_save() to save the px object as a PX-file.
Since we provided no metadata, px() added a minimal set
of metadata, which is necessary for creating a valid PX-file.
The resulting PX-file can be seen below.
CHARSET="ANSI";
DECIMALS=0;
MATRIX="matrix";
SUBJECT-CODE="subject-code";
SUBJECT-AREA="subject-area";
TITLE="";
CONTENTS="contents";
STUB="gender","age";
HEADING="year";
VALUES("gender")="female","male";
VALUES("age")="0-6","17-24","25-64","65+","7-16";
VALUES("year")="2004","2014","2024";
UNITS="units";
CODES("gender")="female","male";
CODES("age")="0-6","17-24","25-64","65+","7-16";
CODES("year")="2004","2014","2024";
VARIABLECODE("gender")="gender";
VARIABLECODE("age")="age";
VARIABLECODE("year")="year";
VARIABLECODE("n")="n";
DATA=
3109 2644 2668
3003 3528 2862
13744 14397 15098
1630 2004 2616
5018 3979 3534
3237 2950 2769
3191 3614 2940
17328 16888 17231
1481 2238 3116
5085 4040 3865
;
If you already have a PX-file, that you want to manipulate using
pxmake, simple pass the path of the file, to the px()
function.
Just as with the dataset, x2 is now a px object and can
be saved or modified using the other functions in pxmake.
The real fun starts when you start modifying the px object, using one of pxmake many built in functions.
In general, each px keyword has a corresponding function in pxmake.
For example, to change the title of the PX-file, you can use the
px_title() function.
The px_title() function returns a new px object, with
the title changed. The original px object is not modified.
x3 |>
  px_codepage("UTF-8") |> # Change file encoding  
  px_matrix("pop") |>
  px_contact("Johan Ejstrud") |>
  px_subject_code("GL") |>
  px_subject_area("Greenland") |>
  px_timeval("year") |>
  px_contents("Population in Greenland") |>
  px_units("People") |>
  px_note("See information about data: ?population_gl") |>
  px_last_updated(format(Sys.time(), "%Y%m%d %H:%M")) |>
  px_stub(c("age", "gender")) |> # Change order of STUB variables
  px_save("population_gl_modified.px")The resulting PX-file can be seen below.
CHARSET="ANSI";
CODEPAGE="UTF-8";
DECIMALS=0;
MATRIX="pop";
SUBJECT-CODE="GL";
SUBJECT-AREA="Greenland";
TITLE="Population in Greenland";
CONTENTS="Population in Greenland";
STUB="age","gender";
HEADING="year";
VALUES("age")="0-6","17-24","25-64","65+","7-16";
VALUES("gender")="female","male";
VALUES("year")="2004","2014","2024";
UNITS="People";
TIMEVAL("year")=TLIST(A1),"2004","2014","2024";
CODES("age")="0-6","17-24","25-64","65+","7-16";
CODES("gender")="female","male";
CODES("year")="2004","2014","2024";
VARIABLECODE("age")="age";
VARIABLECODE("gender")="gender";
VARIABLECODE("year")="year";
VARIABLECODE("n")="n";
LAST-UPDATED="20250530 15:55";
CONTACT="Johan Ejstrud";
NOTE="See information about data: ?population_gl";
DATA=
3109 2644 2668
3237 2950 2769
3003 3528 2862
3191 3614 2940
13744 14397 15098
17328 16888 17231
1630 2004 2616
1481 2238 3116
5018 3979 3534
5085 4040 3865
;
See the other vignettes for more advanced use cases: -
vignette("languages") -
vignette("micro-files")