Warning: package 'formatR' was built under R version 4.6.1
Warning: package 'webexercises' was built under R version 4.6.1
Modesto
August 16, 2023
August 18, 2026
Warning: package 'formatR' was built under R version 4.6.1
Warning: package 'webexercises' was built under R version 4.6.1
Real datasets usually need some preparation before they can be analysed or plotted. We often need to sort rows, select subsets, combine tables, reshape columns, create contingency tables, or calculate summaries by group.
R offers several ways to do these tasks. In this lesson we focus on Base R, because it helps you understand the underlying logic of data manipulation. Later, the same ideas will make packages such as dplyr and tidyr easier to learn.
R6 is about changing the shape, order or level of summary of a dataset:
Most errors in data analysis happen before the statistical test. This lesson is about making that preparation explicit and reproducible.
Before analysing a dataset, we often need to sort rows or select only the observations that match specific conditions. Sorting can be numerical or alphabetical, increasing or decreasing.
There are two main functions in R to order your data, sort() and order(). Let’s see an example using the file coli_genomes_renamed.csv, that we used in the lesson R3.
[1] 2005 2006 2006 2007 2008 2010 2011 2011 2012 2012 2012 2012 2012 2013 2013
[16] 2013 2013 2013 2015 2016
[1] 2016 2015 2013 2013 2013 2013 2013 2012 2012 2012 2012 2012 2011 2011 2010
[16] 2008 2007 2006 2006 2005
[1] 15 7 8 6 3 2 5 14 16 17 18 20 22 9 10 11 12 13 19 21 1 4
[1] "A" "A" "A" "A" "A" "A" "A" "A" "A" "A" "B1" "B1" "B1" "C" "C"
[16] "C" "C" "C" "D" "D" "D" "D"
[1] 4 5 6 7 8 12 13 18 20 21 3 14 22 2 15 16 17 19 1 9 10 11
As you noticed, the R function order() returns a permutation of the order of the elements of a vector. The output is an index vector, not the vector itself. Also note that if the vector contains any NA values, they will be at the end of the index vector by default.
On the other hand, the function sort() returns the vector you pass as input sorted in ascending order by default.
Both functions order the data increasingly, and can be used for numeric or string variables. If you set the decreasing argument to TRUE in a sort() or order(), you will get the vector of indices in descending order.
sort() versus order()
You can also use these functions to order a data frame according to a vector. Alternatively, you can also arrange or shuffle a data frame in reverse order.
Strain Biosample Year Source Phylogroup Serotype Clonotype
15 LREC255 SAMN14278630 2005 Avian C O78:H19 CH4-27
7 LREC244 SAMN14278619 2006 Porcine A O2:H32 CH11-23
8 LREC245 SAMN14278620 2006 Porcine A ONT:H45 C11-398
6 LREC243 SAMN14278618 2007 Porcine A O9:H37 CH7-31
3 LREC240 SAMN14278615 2008 Human B1 O76:H30 CH29-38
2 LREC239 SAMN14278614 2010 Human C O153:H19 CH4-25
5 LREC242 SAMN14278617 2011 Porcine A ONT:HNM CH7-54
14 LREC254 SAMN14278629 2011 Avian B1 O142:H30 C41-35
16 LREC256 SAMN14278631 2012 Human C O8:H19 CH4-54
17 LREC257 SAMN14278632 2012 Human C O9:H19 CH4-27
18 LREC258 SAMN14278633 2012 Human A O9:H4 CH7-34
20 LREC260 SAMN14278635 2012 Human A ONT:H33 CH11-54
22 LREC262 SAMN14278637 2012 Human B1 O66:H10 CH4-32
9 LREC249 SAMN14278624 2013 Human D O145:H28 CH23-331
10 LREC250 SAMN14278625 2013 Human D O145:H28 CH23-331
11 LREC251 SAMN14278626 2013 Human D O145:H28 CH23-331
12 LREC252 SAMN14278627 2013 Human A ONT:H37 C11-54
13 LREC253 SAMN14278628 2013 Avian A ONT:H19 CH94-23
19 LREC259 SAMN14278634 2015 Human C O9:H19 CH4like-27
21 LREC261 SAMN14278636 2016 Human A O98:H26 CH27-23
1 LREC237 SAMN14278613 NA Human D ONT:H28 CH23-331
4 LREC241 SAMN14278616 NA Human A O78:H11 CH11-41
Sequence.Type VF Plasmids kmer Contigs N50 longest.contig..bp.
15 ST88 11 4 113 108 405376 1190696
7 ST10 4 7 115 277 89185 281444
8 ST10888 2 7 115 203 94368 280268
6 ST3011 7 3 93 158 106897 369508
3 ST156 10 2 89 114 270767 738861
2 ST88 14 3 117 159 323172 760527
5 ST746 5 9 89 320 45936 128053
14 ST359 9 4 113 102 240847 460510
16 ST88 14 2 113 108 281822 1140163
17 ST88 14 4 91 224 140521 284241
18 ST46 8 4 85 204 86565 300086
20 ST10 2 5 117 120 228491 576949
22 ST1049 4 2 113 94 325747 822206
9 ST32 22 1 115 376 200150 424527
10 ST137 22 3 111 205 281589 617142
11 ST32 20 1 113 206 182651 412836
12 ST48 1 0 113 140 105396 272304
13 ST347 2 0 117 134 110661 497785
19 ST10890 13 3 113 171 326962 749412
21 ST8233 2 4 89 114 187945 537848
1 ST524 18 3 117 223 272287 662555
4 ST48 5 3 117 212 112160 285056
Assembly_length contigs1kb average_contig
15 5196698 38 48117.57
7 5406295 155 19517.31
8 4796593 114 23628.54
6 4638334 93 29356.54
3 4875343 47 42766.17
2 5415613 57 34060.46
5 4858138 212 15181.68
14 4992565 42 48946.72
16 5252065 43 48630.23
17 5085107 110 22701.37
18 4915667 121 24096.41
20 4881205 48 40676.71
22 4839344 32 51482.38
9 5389075 131 14332.65
10 5340478 78 26051.11
11 5276782 95 25615.45
12 4507328 78 32195.20
13 4664768 77 34811.70
19 5200701 77 30413.46
21 4821342 53 42292.47
1 5341632 74 23953.51
4 5167401 101 24374.53
Strain Biosample Year Source Phylogroup Serotype Clonotype Sequence.Type
NA <NA> <NA> NA <NA> <NA> <NA> <NA> <NA>
NA.1 <NA> <NA> NA <NA> <NA> <NA> <NA> <NA>
NA.2 <NA> <NA> NA <NA> <NA> <NA> <NA> <NA>
NA.3 <NA> <NA> NA <NA> <NA> <NA> <NA> <NA>
NA.4 <NA> <NA> NA <NA> <NA> <NA> <NA> <NA>
NA.5 <NA> <NA> NA <NA> <NA> <NA> <NA> <NA>
NA.6 <NA> <NA> NA <NA> <NA> <NA> <NA> <NA>
NA.7 <NA> <NA> NA <NA> <NA> <NA> <NA> <NA>
NA.8 <NA> <NA> NA <NA> <NA> <NA> <NA> <NA>
NA.9 <NA> <NA> NA <NA> <NA> <NA> <NA> <NA>
NA.10 <NA> <NA> NA <NA> <NA> <NA> <NA> <NA>
NA.11 <NA> <NA> NA <NA> <NA> <NA> <NA> <NA>
NA.12 <NA> <NA> NA <NA> <NA> <NA> <NA> <NA>
NA.13 <NA> <NA> NA <NA> <NA> <NA> <NA> <NA>
NA.14 <NA> <NA> NA <NA> <NA> <NA> <NA> <NA>
NA.15 <NA> <NA> NA <NA> <NA> <NA> <NA> <NA>
NA.16 <NA> <NA> NA <NA> <NA> <NA> <NA> <NA>
NA.17 <NA> <NA> NA <NA> <NA> <NA> <NA> <NA>
NA.18 <NA> <NA> NA <NA> <NA> <NA> <NA> <NA>
NA.19 <NA> <NA> NA <NA> <NA> <NA> <NA> <NA>
VF Plasmids kmer Contigs N50 longest.contig..bp. Assembly_length
NA NA NA NA NA NA NA NA
NA.1 NA NA NA NA NA NA NA
NA.2 NA NA NA NA NA NA NA
NA.3 NA NA NA NA NA NA NA
NA.4 NA NA NA NA NA NA NA
NA.5 NA NA NA NA NA NA NA
NA.6 NA NA NA NA NA NA NA
NA.7 NA NA NA NA NA NA NA
NA.8 NA NA NA NA NA NA NA
NA.9 NA NA NA NA NA NA NA
NA.10 NA NA NA NA NA NA NA
NA.11 NA NA NA NA NA NA NA
NA.12 NA NA NA NA NA NA NA
NA.13 NA NA NA NA NA NA NA
NA.14 NA NA NA NA NA NA NA
NA.15 NA NA NA NA NA NA NA
NA.16 NA NA NA NA NA NA NA
NA.17 NA NA NA NA NA NA NA
NA.18 NA NA NA NA NA NA NA
NA.19 NA NA NA NA NA NA NA
contigs1kb average_contig
NA NA NA
NA.1 NA NA
NA.2 NA NA
NA.3 NA NA
NA.4 NA NA
NA.5 NA NA
NA.6 NA NA
NA.7 NA NA
NA.8 NA NA
NA.9 NA NA
NA.10 NA NA
NA.11 NA NA
NA.12 NA NA
NA.13 NA NA
NA.14 NA NA
NA.15 NA NA
NA.16 NA NA
NA.17 NA NA
NA.18 NA NA
NA.19 NA NA
Strain Biosample Year Source Phylogroup Serotype Clonotype
9 LREC249 SAMN14278624 2013 Human D O145:H28 CH23-331
17 LREC257 SAMN14278632 2012 Human C O9:H19 CH4-27
3 LREC240 SAMN14278615 2008 Human B1 O76:H30 CH29-38
16 LREC256 SAMN14278631 2012 Human C O8:H19 CH4-54
10 LREC250 SAMN14278625 2013 Human D O145:H28 CH23-331
14 LREC254 SAMN14278629 2011 Avian B1 O142:H30 C41-35
11 LREC251 SAMN14278626 2013 Human D O145:H28 CH23-331
2 LREC239 SAMN14278614 2010 Human C O153:H19 CH4-25
7 LREC244 SAMN14278619 2006 Porcine A O2:H32 CH11-23
12 LREC252 SAMN14278627 2013 Human A ONT:H37 C11-54
13 LREC253 SAMN14278628 2013 Avian A ONT:H19 CH94-23
8 LREC245 SAMN14278620 2006 Porcine A ONT:H45 C11-398
22 LREC262 SAMN14278637 2012 Human B1 O66:H10 CH4-32
15 LREC255 SAMN14278630 2005 Avian C O78:H19 CH4-27
5 LREC242 SAMN14278617 2011 Porcine A ONT:HNM CH7-54
18 LREC258 SAMN14278633 2012 Human A O9:H4 CH7-34
20 LREC260 SAMN14278635 2012 Human A ONT:H33 CH11-54
6 LREC243 SAMN14278618 2007 Porcine A O9:H37 CH7-31
4 LREC241 SAMN14278616 NA Human A O78:H11 CH11-41
21 LREC261 SAMN14278636 2016 Human A O98:H26 CH27-23
1 LREC237 SAMN14278613 NA Human D ONT:H28 CH23-331
19 LREC259 SAMN14278634 2015 Human C O9:H19 CH4like-27
Sequence.Type VF Plasmids kmer Contigs N50 longest.contig..bp.
9 ST32 22 1 115 376 200150 424527
17 ST88 14 4 91 224 140521 284241
3 ST156 10 2 89 114 270767 738861
16 ST88 14 2 113 108 281822 1140163
10 ST137 22 3 111 205 281589 617142
14 ST359 9 4 113 102 240847 460510
11 ST32 20 1 113 206 182651 412836
2 ST88 14 3 117 159 323172 760527
7 ST10 4 7 115 277 89185 281444
12 ST48 1 0 113 140 105396 272304
13 ST347 2 0 117 134 110661 497785
8 ST10888 2 7 115 203 94368 280268
22 ST1049 4 2 113 94 325747 822206
15 ST88 11 4 113 108 405376 1190696
5 ST746 5 9 89 320 45936 128053
18 ST46 8 4 85 204 86565 300086
20 ST10 2 5 117 120 228491 576949
6 ST3011 7 3 93 158 106897 369508
4 ST48 5 3 117 212 112160 285056
21 ST8233 2 4 89 114 187945 537848
1 ST524 18 3 117 223 272287 662555
19 ST10890 13 3 113 171 326962 749412
Assembly_length contigs1kb average_contig
9 5389075 131 14332.65
17 5085107 110 22701.37
3 4875343 47 42766.17
16 5252065 43 48630.23
10 5340478 78 26051.11
14 4992565 42 48946.72
11 5276782 95 25615.45
2 5415613 57 34060.46
7 5406295 155 19517.31
12 4507328 78 32195.20
13 4664768 77 34811.70
8 4796593 114 23628.54
22 4839344 32 51482.38
15 5196698 38 48117.57
5 4858138 212 15181.68
18 4915667 121 24096.41
20 4881205 48 40676.71
6 4638334 93 29356.54
4 5167401 101 24374.53
21 4821342 53 42292.47
1 5341632 74 23953.51
19 5200701 77 30413.46
Strain Biosample Year Source Phylogroup Serotype Clonotype
22 LREC262 SAMN14278637 2012 Human B1 O66:H10 CH4-32
21 LREC261 SAMN14278636 2016 Human A O98:H26 CH27-23
20 LREC260 SAMN14278635 2012 Human A ONT:H33 CH11-54
19 LREC259 SAMN14278634 2015 Human C O9:H19 CH4like-27
18 LREC258 SAMN14278633 2012 Human A O9:H4 CH7-34
17 LREC257 SAMN14278632 2012 Human C O9:H19 CH4-27
16 LREC256 SAMN14278631 2012 Human C O8:H19 CH4-54
15 LREC255 SAMN14278630 2005 Avian C O78:H19 CH4-27
14 LREC254 SAMN14278629 2011 Avian B1 O142:H30 C41-35
13 LREC253 SAMN14278628 2013 Avian A ONT:H19 CH94-23
12 LREC252 SAMN14278627 2013 Human A ONT:H37 C11-54
11 LREC251 SAMN14278626 2013 Human D O145:H28 CH23-331
10 LREC250 SAMN14278625 2013 Human D O145:H28 CH23-331
9 LREC249 SAMN14278624 2013 Human D O145:H28 CH23-331
8 LREC245 SAMN14278620 2006 Porcine A ONT:H45 C11-398
7 LREC244 SAMN14278619 2006 Porcine A O2:H32 CH11-23
6 LREC243 SAMN14278618 2007 Porcine A O9:H37 CH7-31
5 LREC242 SAMN14278617 2011 Porcine A ONT:HNM CH7-54
4 LREC241 SAMN14278616 NA Human A O78:H11 CH11-41
3 LREC240 SAMN14278615 2008 Human B1 O76:H30 CH29-38
2 LREC239 SAMN14278614 2010 Human C O153:H19 CH4-25
1 LREC237 SAMN14278613 NA Human D ONT:H28 CH23-331
Sequence.Type VF Plasmids kmer Contigs N50 longest.contig..bp.
22 ST1049 4 2 113 94 325747 822206
21 ST8233 2 4 89 114 187945 537848
20 ST10 2 5 117 120 228491 576949
19 ST10890 13 3 113 171 326962 749412
18 ST46 8 4 85 204 86565 300086
17 ST88 14 4 91 224 140521 284241
16 ST88 14 2 113 108 281822 1140163
15 ST88 11 4 113 108 405376 1190696
14 ST359 9 4 113 102 240847 460510
13 ST347 2 0 117 134 110661 497785
12 ST48 1 0 113 140 105396 272304
11 ST32 20 1 113 206 182651 412836
10 ST137 22 3 111 205 281589 617142
9 ST32 22 1 115 376 200150 424527
8 ST10888 2 7 115 203 94368 280268
7 ST10 4 7 115 277 89185 281444
6 ST3011 7 3 93 158 106897 369508
5 ST746 5 9 89 320 45936 128053
4 ST48 5 3 117 212 112160 285056
3 ST156 10 2 89 114 270767 738861
2 ST88 14 3 117 159 323172 760527
1 ST524 18 3 117 223 272287 662555
Assembly_length contigs1kb average_contig
22 4839344 32 51482.38
21 4821342 53 42292.47
20 4881205 48 40676.71
19 5200701 77 30413.46
18 4915667 121 24096.41
17 5085107 110 22701.37
16 5252065 43 48630.23
15 5196698 38 48117.57
14 4992565 42 48946.72
13 4664768 77 34811.70
12 4507328 78 32195.20
11 5276782 95 25615.45
10 5340478 78 26051.11
9 5389075 131 14332.65
8 4796593 114 23628.54
7 5406295 155 19517.31
6 4638334 93 29356.54
5 4858138 212 15181.68
4 5167401 101 24374.53
3 4875343 47 42766.17
2 5415613 57 34060.46
1 5341632 74 23953.51
sort() or order()?You want to sort the rows of coli_genomes by the column Year. Which command is appropriate?
Select the right answer
Now imagine you have a large data set and want to subdivide only some cases (=rows). You already know some ways to do this, but in the following example we will test the function subset(), which is very handy when you want to extract the cases that satisfy multiple conditions.
Imagine that for a new project we want to select the strains with better genome design quality or from a subset. We will keep strains from Phylogroup A, with an assembly N50 > 150,000 bp and less than 100 contigs >= 1 kb.
#option 1: multi-step
selection<-coli_genomes[coli_genomes$contigs1kb<100,]
selection<-selection[selection$N50>150000,]
selection<-selection[selection$Phylogroup=='A',]
#option 2: which statements
selection2<-coli_genomes[which(coli_genomes$contigs1kb<100 & coli_genomes$N50>150000 & coli_genomes$Phylogroup=='A'),]
#option 2b:with attach(dataframe) you avoid repeat the name of the dataframe
attach(coli_genomes)
selection2 <- coli_genomes[which(contigs1kb<100 & N50>150000 & Phylogroup=='A'),]
detach(coli_genomes) #detach dataframe
#option 3: subset() is a straightforward way to do that trick
selection3<-subset(coli_genomes, subset= contigs1kb<100 & N50>150000 & Phylogroup=='A')attach() in analysis scripts
attach() can save typing in short examples, but it can also make code harder to debug because variable names may come from different objects. In this lesson, we prefer explicit code such as coli_genomes$N50 or readable helpers such as subset().
If you want to make sure that the three methods give the same output, you can check the data frame, or check the dimensions or structure with dim() or str(), but this is difficult with large data sets with hundreds or thousands of cases (see below). The function all.equal() does this task for you.
If you work with a lot of data or get different batches of related data frames, you may have multiple tables and want to combine them in different ways. An easy way is to use cbind() or rbind() if you have the same number of rows and columns. A more practical way is to use the merge() function. Look and test the following examples using the coli_genomes data frame and a new table named colis3.csv
Error in `rbind()`:
! el número de columnas de los argumentos no coincide
Error in `data.frame()`:
! los argumentos implican un número diferente de filas: 22, 27
'data.frame': 22 obs. of 24 variables:
$ Strain : chr "LREC237" "LREC239" "LREC240" "LREC241" ...
$ Year : int NA 2010 2008 NA 2011 2007 2006 2006 2013 2013 ...
$ Biosample : chr "SAMN14278613" "SAMN14278614" "SAMN14278615" "SAMN14278616" ...
$ Source : chr "Human" "Human" "Human" "Human" ...
$ Phylogroup : chr "D" "C" "B1" "A" ...
$ Serotype : chr "ONT:H28" "O153:H19" "O76:H30" "O78:H11" ...
$ Clonotype : chr "CH23-331" "CH4-25" "CH29-38" "CH11-41" ...
$ Sequence.Type : chr "ST524" "ST88" "ST156" "ST48" ...
$ VF : int 18 14 10 5 5 7 4 2 22 22 ...
$ Plasmids : int 3 3 2 3 9 3 7 7 1 3 ...
$ kmer : int 117 117 89 117 89 93 115 115 115 111 ...
$ Contigs : int 223 159 114 212 320 158 277 203 376 205 ...
$ N50 : int 272287 323172 270767 112160 45936 106897 89185 94368 200150 281589 ...
$ longest.contig..bp.: int 662555 760527 738861 285056 128053 369508 281444 280268 424527 617142 ...
$ Assembly_length : int 5341632 5415613 4875343 5167401 4858138 4638334 5406295 4796593 5389075 5340478 ...
$ contigs1kb : int 74 57 47 101 212 93 155 114 131 78 ...
$ average_contig : num 23954 34060 42766 24375 15182 ...
$ X : int 1 2 3 4 5 6 7 8 12 13 ...
$ CRISPR : int 9 12 5 9 9 10 7 10 7 7 ...
$ Cas : chr "[CAS-TypeIE (n=1),]" "[CAS-TypeIE (n=1),]" "[CAS-TypeIE (n=1),]" "[CAS (n=1),, CAS (n=1),, CAS (n=1),, CAS-TypeIE (n=1),]" ...
$ AMR : int 2 2 5 2 4 2 2 4 2 2 ...
$ Vir : int 20 12 10 3 4 6 7 4 26 21 ...
$ Integron : int 0 0 0 0 0 0 0 0 0 0 ...
$ seqs : chr "2020-07-24" "2019-02-27" "2018-03-08" "2020-10-12" ...
'data.frame': 22 obs. of 25 variables:
$ Strain : chr "LREC237" "LREC239" "LREC240" "LREC241" ...
$ Biosample : chr "SAMN14278613" "SAMN14278614" "SAMN14278615" "SAMN14278616" ...
$ Year.x : int NA 2010 2008 NA 2011 2007 2006 2006 2013 2013 ...
$ Source : chr "Human" "Human" "Human" "Human" ...
$ Phylogroup : chr "D" "C" "B1" "A" ...
$ Serotype : chr "ONT:H28" "O153:H19" "O76:H30" "O78:H11" ...
$ Clonotype : chr "CH23-331" "CH4-25" "CH29-38" "CH11-41" ...
$ Sequence.Type : chr "ST524" "ST88" "ST156" "ST48" ...
$ VF : int 18 14 10 5 5 7 4 2 22 22 ...
$ Plasmids : int 3 3 2 3 9 3 7 7 1 3 ...
$ kmer : int 117 117 89 117 89 93 115 115 115 111 ...
$ Contigs : int 223 159 114 212 320 158 277 203 376 205 ...
$ N50 : int 272287 323172 270767 112160 45936 106897 89185 94368 200150 281589 ...
$ longest.contig..bp.: int 662555 760527 738861 285056 128053 369508 281444 280268 424527 617142 ...
$ Assembly_length : int 5341632 5415613 4875343 5167401 4858138 4638334 5406295 4796593 5389075 5340478 ...
$ contigs1kb : int 74 57 47 101 212 93 155 114 131 78 ...
$ average_contig : num 23954 34060 42766 24375 15182 ...
$ X : int 1 2 3 4 5 6 7 8 12 13 ...
$ Year.y : int NA 2010 2008 NA 2011 2007 2006 2006 2013 2013 ...
$ CRISPR : int 9 12 5 9 9 10 7 10 7 7 ...
$ Cas : chr "[CAS-TypeIE (n=1),]" "[CAS-TypeIE (n=1),]" "[CAS-TypeIE (n=1),]" "[CAS (n=1),, CAS (n=1),, CAS (n=1),, CAS-TypeIE (n=1),]" ...
$ AMR : int 2 2 5 2 4 2 2 4 2 2 ...
$ Vir : int 20 12 10 3 4 6 7 4 26 21 ...
$ Integron : int 0 0 0 0 0 0 0 0 0 0 ...
$ seqs : chr "2020-07-24" "2019-02-27" "2018-03-08" "2020-10-12" ...
'data.frame': 81 obs. of 25 variables:
$ Year : int 2005 2006 2006 2006 2006 2007 2008 2010 2010 2011 ...
$ Strain.x : chr "LREC255" "LREC244" "LREC244" "LREC245" ...
$ Biosample : chr "SAMN14278630" "SAMN14278619" "SAMN14278619" "SAMN14278620" ...
$ Source : chr "Avian" "Porcine" "Porcine" "Porcine" ...
$ Phylogroup : chr "C" "A" "A" "A" ...
$ Serotype : chr "O78:H19" "O2:H32" "O2:H32" "ONT:H45" ...
$ Clonotype : chr "CH4-27" "CH11-23" "CH11-23" "C11-398" ...
$ Sequence.Type : chr "ST88" "ST10" "ST10" "ST10888" ...
$ VF : int 11 4 4 2 2 7 10 14 14 5 ...
$ Plasmids : int 4 7 7 7 7 3 2 3 3 9 ...
$ kmer : int 113 115 115 115 115 93 89 117 117 89 ...
$ Contigs : int 108 277 277 203 203 158 114 159 159 320 ...
$ N50 : int 405376 89185 89185 94368 94368 106897 270767 323172 323172 45936 ...
$ longest.contig..bp.: int 1190696 281444 281444 280268 280268 369508 738861 760527 760527 128053 ...
$ Assembly_length : int 5196698 5406295 5406295 4796593 4796593 4638334 4875343 5415613 5415613 4858138 ...
$ contigs1kb : int 38 155 155 114 114 93 47 57 57 212 ...
$ average_contig : num 48118 19517 19517 23629 23629 ...
$ X : int 18 8 7 8 7 6 3 9 2 5 ...
$ Strain.y : chr "LREC255" "LREC245" "LREC244" "LREC245" ...
$ CRISPR : int 10 10 7 10 7 10 5 6 12 9 ...
$ Cas : chr "[CAS-TypeIE (n=1),, CAS-TypeID (n=1),]" "[CAS (n=1),, CAS (n=1),, CAS-TypeIE (n=1),, CAS (n=1),, CAS (n=1),]" "[CAS (n=1),, CAS (n=1),, CAS (n=1),]" "[CAS (n=1),, CAS (n=1),, CAS-TypeIE (n=1),, CAS (n=1),, CAS (n=1),]" ...
$ AMR : int NA 4 2 4 2 2 5 4 2 4 ...
$ Vir : int 7 4 7 4 7 6 10 8 12 4 ...
$ Integron : int 0 0 0 0 0 0 0 0 0 0 ...
$ seqs : chr "2020-08-03" "2019-12-30" "2018-08-14" "2019-12-30" ...
'data.frame': 22 obs. of 24 variables:
$ Strain : chr "LREC237" "LREC239" "LREC240" "LREC241" ...
$ Year : int NA 2010 2008 NA 2011 2007 2006 2006 2013 2013 ...
$ Biosample : chr "SAMN14278613" "SAMN14278614" "SAMN14278615" "SAMN14278616" ...
$ Source : chr "Human" "Human" "Human" "Human" ...
$ Phylogroup : chr "D" "C" "B1" "A" ...
$ Serotype : chr "ONT:H28" "O153:H19" "O76:H30" "O78:H11" ...
$ Clonotype : chr "CH23-331" "CH4-25" "CH29-38" "CH11-41" ...
$ Sequence.Type : chr "ST524" "ST88" "ST156" "ST48" ...
$ VF : int 18 14 10 5 5 7 4 2 22 22 ...
$ Plasmids : int 3 3 2 3 9 3 7 7 1 3 ...
$ kmer : int 117 117 89 117 89 93 115 115 115 111 ...
$ Contigs : int 223 159 114 212 320 158 277 203 376 205 ...
$ N50 : int 272287 323172 270767 112160 45936 106897 89185 94368 200150 281589 ...
$ longest.contig..bp.: int 662555 760527 738861 285056 128053 369508 281444 280268 424527 617142 ...
$ Assembly_length : int 5341632 5415613 4875343 5167401 4858138 4638334 5406295 4796593 5389075 5340478 ...
$ contigs1kb : int 74 57 47 101 212 93 155 114 131 78 ...
$ average_contig : num 23954 34060 42766 24375 15182 ...
$ X : int 1 2 3 4 5 6 7 8 12 13 ...
$ CRISPR : int 9 12 5 9 9 10 7 10 7 7 ...
$ Cas : chr "[CAS-TypeIE (n=1),]" "[CAS-TypeIE (n=1),]" "[CAS-TypeIE (n=1),]" "[CAS (n=1),, CAS (n=1),, CAS (n=1),, CAS-TypeIE (n=1),]" ...
$ AMR : int 2 2 5 2 4 2 2 4 2 2 ...
$ Vir : int 20 12 10 3 4 6 7 4 26 21 ...
$ Integron : int 0 0 0 0 0 0 0 0 0 0 ...
$ seqs : chr "2020-07-24" "2019-02-27" "2018-03-08" "2020-10-12" ...
'data.frame': 27 obs. of 24 variables:
$ Strain : chr "LREC237" "LREC239" "LREC240" "LREC241" ...
$ Year : int NA 2010 2008 NA 2011 2007 2006 2006 2010 2013 ...
$ Biosample : chr "SAMN14278613" "SAMN14278614" "SAMN14278615" "SAMN14278616" ...
$ Source : chr "Human" "Human" "Human" "Human" ...
$ Phylogroup : chr "D" "C" "B1" "A" ...
$ Serotype : chr "ONT:H28" "O153:H19" "O76:H30" "O78:H11" ...
$ Clonotype : chr "CH23-331" "CH4-25" "CH29-38" "CH11-41" ...
$ Sequence.Type : chr "ST524" "ST88" "ST156" "ST48" ...
$ VF : int 18 14 10 5 5 7 4 2 NA NA ...
$ Plasmids : int 3 3 2 3 9 3 7 7 NA NA ...
$ kmer : int 117 117 89 117 89 93 115 115 NA NA ...
$ Contigs : int 223 159 114 212 320 158 277 203 NA NA ...
$ N50 : int 272287 323172 270767 112160 45936 106897 89185 94368 NA NA ...
$ longest.contig..bp.: int 662555 760527 738861 285056 128053 369508 281444 280268 NA NA ...
$ Assembly_length : int 5341632 5415613 4875343 5167401 4858138 4638334 5406295 4796593 NA NA ...
$ contigs1kb : int 74 57 47 101 212 93 155 114 NA NA ...
$ average_contig : num 23954 34060 42766 24375 15182 ...
$ X : int 1 2 3 4 5 6 7 8 9 10 ...
$ CRISPR : int 9 12 5 9 9 10 7 10 6 8 ...
$ Cas : chr "[CAS-TypeIE (n=1),]" "[CAS-TypeIE (n=1),]" "[CAS-TypeIE (n=1),]" "[CAS (n=1),, CAS (n=1),, CAS (n=1),, CAS-TypeIE (n=1),]" ...
$ AMR : int 2 2 5 2 4 2 2 4 4 2 ...
$ Vir : int 20 12 10 3 4 6 7 4 8 23 ...
$ Integron : int 0 0 0 0 0 0 0 0 0 0 ...
$ seqs : chr "2020-07-24" "2019-02-27" "2018-03-08" "2020-10-12" ...
'data.frame': 22 obs. of 24 variables:
$ Strain : chr "LREC237" "LREC239" "LREC240" "LREC241" ...
$ Year : int NA 2010 2008 NA 2011 2007 2006 2006 2013 2013 ...
$ Biosample : chr "SAMN14278613" "SAMN14278614" "SAMN14278615" "SAMN14278616" ...
$ Source : chr "Human" "Human" "Human" "Human" ...
$ Phylogroup : chr "D" "C" "B1" "A" ...
$ Serotype : chr "ONT:H28" "O153:H19" "O76:H30" "O78:H11" ...
$ Clonotype : chr "CH23-331" "CH4-25" "CH29-38" "CH11-41" ...
$ Sequence.Type : chr "ST524" "ST88" "ST156" "ST48" ...
$ VF : int 18 14 10 5 5 7 4 2 22 22 ...
$ Plasmids : int 3 3 2 3 9 3 7 7 1 3 ...
$ kmer : int 117 117 89 117 89 93 115 115 115 111 ...
$ Contigs : int 223 159 114 212 320 158 277 203 376 205 ...
$ N50 : int 272287 323172 270767 112160 45936 106897 89185 94368 200150 281589 ...
$ longest.contig..bp.: int 662555 760527 738861 285056 128053 369508 281444 280268 424527 617142 ...
$ Assembly_length : int 5341632 5415613 4875343 5167401 4858138 4638334 5406295 4796593 5389075 5340478 ...
$ contigs1kb : int 74 57 47 101 212 93 155 114 131 78 ...
$ average_contig : num 23954 34060 42766 24375 15182 ...
$ X : int 1 2 3 4 5 6 7 8 12 13 ...
$ CRISPR : int 9 12 5 9 9 10 7 10 7 7 ...
$ Cas : chr "[CAS-TypeIE (n=1),]" "[CAS-TypeIE (n=1),]" "[CAS-TypeIE (n=1),]" "[CAS (n=1),, CAS (n=1),, CAS (n=1),, CAS-TypeIE (n=1),]" ...
$ AMR : int 2 2 5 2 4 2 2 4 2 2 ...
$ Vir : int 20 12 10 3 4 6 7 4 26 21 ...
$ Integron : int 0 0 0 0 0 0 0 0 0 0 ...
$ seqs : chr "2020-07-24" "2019-02-27" "2018-03-08" "2020-10-12" ...
'data.frame': 27 obs. of 24 variables:
$ Strain : chr "LREC237" "LREC239" "LREC240" "LREC241" ...
$ Year : int NA 2010 2008 NA 2011 2007 2006 2006 2010 2013 ...
$ Biosample : chr "SAMN14278613" "SAMN14278614" "SAMN14278615" "SAMN14278616" ...
$ Source : chr "Human" "Human" "Human" "Human" ...
$ Phylogroup : chr "D" "C" "B1" "A" ...
$ Serotype : chr "ONT:H28" "O153:H19" "O76:H30" "O78:H11" ...
$ Clonotype : chr "CH23-331" "CH4-25" "CH29-38" "CH11-41" ...
$ Sequence.Type : chr "ST524" "ST88" "ST156" "ST48" ...
$ VF : int 18 14 10 5 5 7 4 2 NA NA ...
$ Plasmids : int 3 3 2 3 9 3 7 7 NA NA ...
$ kmer : int 117 117 89 117 89 93 115 115 NA NA ...
$ Contigs : int 223 159 114 212 320 158 277 203 NA NA ...
$ N50 : int 272287 323172 270767 112160 45936 106897 89185 94368 NA NA ...
$ longest.contig..bp.: int 662555 760527 738861 285056 128053 369508 281444 280268 NA NA ...
$ Assembly_length : int 5341632 5415613 4875343 5167401 4858138 4638334 5406295 4796593 NA NA ...
$ contigs1kb : int 74 57 47 101 212 93 155 114 NA NA ...
$ average_contig : num 23954 34060 42766 24375 15182 ...
$ X : int 1 2 3 4 5 6 7 8 9 10 ...
$ CRISPR : int 9 12 5 9 9 10 7 10 6 8 ...
$ Cas : chr "[CAS-TypeIE (n=1),]" "[CAS-TypeIE (n=1),]" "[CAS-TypeIE (n=1),]" "[CAS (n=1),, CAS (n=1),, CAS (n=1),, CAS-TypeIE (n=1),]" ...
$ AMR : int 2 2 5 2 4 2 2 4 4 2 ...
$ Vir : int 20 12 10 3 4 6 7 4 8 23 ...
$ Integron : int 0 0 0 0 0 0 0 0 0 0 ...
$ seqs : chr "2020-07-24" "2019-02-27" "2018-03-08" "2020-10-12" ...
'data.frame': 594 obs. of 26 variables:
$ Strain.x : chr "LREC237" "LREC239" "LREC240" "LREC241" ...
$ Biosample : chr "SAMN14278613" "SAMN14278614" "SAMN14278615" "SAMN14278616" ...
$ Year.x : int NA 2010 2008 NA 2011 2007 2006 2006 2013 2013 ...
$ Source : chr "Human" "Human" "Human" "Human" ...
$ Phylogroup : chr "D" "C" "B1" "A" ...
$ Serotype : chr "ONT:H28" "O153:H19" "O76:H30" "O78:H11" ...
$ Clonotype : chr "CH23-331" "CH4-25" "CH29-38" "CH11-41" ...
$ Sequence.Type : chr "ST524" "ST88" "ST156" "ST48" ...
$ VF : int 18 14 10 5 5 7 4 2 22 22 ...
$ Plasmids : int 3 3 2 3 9 3 7 7 1 3 ...
$ kmer : int 117 117 89 117 89 93 115 115 115 111 ...
$ Contigs : int 223 159 114 212 320 158 277 203 376 205 ...
$ N50 : int 272287 323172 270767 112160 45936 106897 89185 94368 200150 281589 ...
$ longest.contig..bp.: int 662555 760527 738861 285056 128053 369508 281444 280268 424527 617142 ...
$ Assembly_length : int 5341632 5415613 4875343 5167401 4858138 4638334 5406295 4796593 5389075 5340478 ...
$ contigs1kb : int 74 57 47 101 212 93 155 114 131 78 ...
$ average_contig : num 23954 34060 42766 24375 15182 ...
$ X : int 1 1 1 1 1 1 1 1 1 1 ...
$ Strain.y : chr "LREC237" "LREC237" "LREC237" "LREC237" ...
$ Year.y : int NA NA NA NA NA NA NA NA NA NA ...
$ CRISPR : int 9 9 9 9 9 9 9 9 9 9 ...
$ Cas : chr "[CAS-TypeIE (n=1),]" "[CAS-TypeIE (n=1),]" "[CAS-TypeIE (n=1),]" "[CAS-TypeIE (n=1),]" ...
$ AMR : int 2 2 2 2 2 2 2 2 2 2 ...
$ Vir : int 20 20 20 20 20 20 20 20 20 20 ...
$ Integron : int 0 0 0 0 0 0 0 0 0 0 ...
$ seqs : chr "2020-07-24" "2020-07-24" "2020-07-24" "2020-07-24" ...
As you noticed, the function merge() combines dataframes, however it is a generic function that can be also used with other objects (like vectors or matrices), but they will be coerced to data.frame class.
By default, merge() will do a natural join or inner join, merging two dataframes in one that contains only once the common elements of both. The arguments all = TRUE, all.x = TRUE and all.y = TRUE will force an outer join in which all elements of both, the first or the second dataframes are selected. In these cases, if not all rows in the first data frame match all the rows in the second, the output is filled with NA values in those cases.
Finally, the Cartesian product of both dataframes can be obtained in R by setting the argument by = NULL in the merge() function.
merge()
| Goal | Base R code |
|---|---|
| Keep only matching rows | merge(x, y, by = "id") |
| Keep all rows from both tables | merge(x, y, by = "id", all = TRUE) |
Keep all rows from x |
merge(x, y, by = "id", all.x = TRUE) |
Keep all rows from y |
merge(x, y, by = "id", all.y = TRUE) |
| Cartesian product | merge(x, y, by = NULL) |
Two students enrolled in different University courses: Rafa in A, B, D, E and G and Roger in B, C, D and F. Rafa got the following marks 8, 9, 9.5, 8.75 and 9 and Roger obtained 10, 9.7, 9 and 10. Write a R program to create merged dataframes with all the marks (outer join), all the Rafa’s marks (left outer), all the Roger’s marks (right outer), and the marks in the common courses (inner join).
A column per experimental condition or a column per variable? Is the same?
In the table Zebrafish_data.csv from the Lesson R5 we have the results of an experiment in which a collaborator scored the number of metastatic cancer cells upon the expression of different transcripts of the EFNA3 gene. Each transcript is cloned into a pLoC plasmid, and we have negative (empty plasmid) and positive controls (wt transcript). Let’s import and check the data.
'data.frame': 41 obs. of 6 variables:
$ pLoC : int 36 32 10 26 15 23 17 14 44 12 ...
$ EFNA3: int 35 33 17 25 89 36 40 36 35 37 ...
$ NC1 : int 58 26 26 18 20 24 10 31 28 26 ...
$ NC1s : int 11 11 19 12 12 20 7 104 116 11 ...
$ NC2 : int 53 37 56 48 27 29 22 79 22 18 ...
$ NC2s : int 40 43 19 18 33 29 29 25 28 47 ...
pLoC EFNA3 NC1 NC1s NC2 NC2s
1 36 35 58 11 53 40
2 32 33 26 11 37 43
3 10 17 26 19 56 19
4 26 25 18 12 48 18
5 15 89 20 12 27 33
6 23 36 24 20 29 29
How many columns has the table? How many variables are there?
Here we have one column per experimental condition. Thus, this table format does not agree with the standard way to introduce the data in a table, the data-matrix: Rows for cases and columns for variables.
Having the data in a long format is especially useful for grouped plots, aggregated summaries and many modelling functions. We transform the table into a data matrix, or long table, using the function stack(). You can also do it the other way around with the function unstack().
'data.frame': 246 obs. of 2 variables:
$ values: int 36 32 10 26 15 23 17 14 44 12 ...
$ ind : Factor w/ 6 levels "pLoC","EFNA3",..: 1 1 1 1 1 1 1 1 1 1 ...
values ind
1 36 pLoC
2 32 pLoC
3 10 pLoC
4 26 pLoC
5 15 pLoC
6 23 pLoC
'data.frame': 41 obs. of 6 variables:
$ pLoC : int 36 32 10 26 15 23 17 14 44 12 ...
$ EFNA3: int 35 33 17 25 89 36 40 36 35 37 ...
$ NC1 : int 58 26 26 18 20 24 10 31 28 26 ...
$ NC1s : int 11 11 19 12 12 20 7 104 116 11 ...
$ NC2 : int 53 37 56 48 27 29 22 79 22 18 ...
$ NC2s : int 40 43 19 18 33 29 29 25 28 47 ...
pLoC EFNA3 NC1 NC1s NC2 NC2s
1 36 35 58 11 53 40
2 32 33 26 11 37 43
3 10 17 26 19 56 19
4 26 25 18 12 48 18
5 15 89 20 12 27 33
6 23 36 24 20 29 29
However, sometimes the dataset is more complex and there are other variables that change the table structure, as in the table Zebrafish_full.csv. In this case, remember that stack is designed to transform tables of only two variables. Thus, you must stack only the desired two variables and then construct the table by adding the rest of the information, for instance with cbind(), as in the example below.
pLoC EFNA3 NC1 NC1s NC2 NC2s assay
1 36 35 58 11 53 40 2
2 32 33 26 11 37 43 2
3 10 17 26 19 56 19 2
4 26 25 18 12 48 18 1
5 15 89 20 12 27 33 1
6 23 36 24 20 29 29 1
values ind
1 36 pLoC
2 32 pLoC
3 10 pLoC
4 26 pLoC
5 15 pLoC
6 23 pLoC
7 17 pLoC
8 14 pLoC
9 44 pLoC
10 12 pLoC
11 3 pLoC
12 21 pLoC
13 21 pLoC
14 39 pLoC
15 19 pLoC
Cells Sample Assay
1 36 pLoC 2
2 32 pLoC 2
3 10 pLoC 2
4 26 pLoC 1
5 15 pLoC 1
6 23 pLoC 1
7 17 pLoC 3
8 14 pLoC 2
9 44 pLoC 3
10 12 pLoC 1
11 3 pLoC 1
12 21 pLoC 1
13 21 pLoC 3
14 39 pLoC 2
15 19 pLoC 3
Cells Sample Assay
1 36 pLoC 2
2 32 pLoC 2
3 10 pLoC 2
4 26 pLoC 1
5 15 pLoC 1
6 23 pLoC 1
7 17 pLoC 3
8 14 pLoC 2
9 44 pLoC 3
10 12 pLoC 1
11 3 pLoC 1
12 21 pLoC 1
13 21 pLoC 3
14 39 pLoC 2
15 19 pLoC 3
[1] TRUE
Remember that datamatrix is not an R structure, but a general concept in data analysis. Also, for more complex dataframes, I suggest to use the function melt(). However, this function name refers to two different functions in two alternative packages: reshape2 and data.table, with slightly different behavior.
From the previous exercise with marks of two students, we have a table students with all the marks, in which each student is a column.
Course Rafa Roger
1 A 8.00 NA
2 B 9.00 10.0
3 C NA 9.7
4 D 9.50 9.0
5 E 8.75 NA
6 F NA 10.0
7 G 9.50 NA
However, we need a table in which each column is a variable, as follows:
Course Mark Student
1 A 8.00 Rafa
2 B 9.00 Rafa
3 C NA Rafa
4 D 9.50 Rafa
5 E 8.75 Rafa
6 F NA Rafa
7 G 9.50 Rafa
8 A NA Roger
9 B 10.00 Roger
10 C 9.70 Roger
11 D 9.00 Roger
12 E NA Roger
13 F 10.00 Roger
14 G NA Roger
How would you obtain the second table?
Course Mark Student
1 A 8.00 Rafa
2 B 9.00 Rafa
3 C NA Rafa
4 D 9.50 Rafa
5 E 8.75 Rafa
6 F NA Rafa
7 G 9.50 Rafa
8 A NA Roger
9 B 10.00 Roger
10 C 9.70 Roger
11 D 9.00 Roger
12 E NA Roger
13 F 10.00 Roger
14 G NA Roger
We are going to make some examples with a huge dataset of Covid19 Vaccination data in EU. The data is publicly available at https://opendata.ecdc.europa.eu/covid19/vaccine_tracker/csv/data.csv. That is a big file that cannot be hosted on GitHub, so we can download it and save in our data folder. For instance, I used the name vaccines_EU_22oct2022.csv.
From this point on, in some examples we will show only some lines of the output of the code chunks (you will notice that the output ends with — Cropped output —). Otherwise, this document is very long and difficult to follow.
As always, it’s encouraged to run the code yourself to see and understand the full returned output.
Even with large datasets, we can use table() or summary() functions, to overview data. But, sometimes we just doesn’t.
AT BE BG CY CZ DE DK EE EL ES
17292 7330 6001 7098 6593 564 4821 7755 16413 12960
FI FI19 FI193 FI194 FI195 FI197 FI1B FI1B1 FI1C FI1C1
16965 16965 16965 16965 16965 16965 16965 16965 16965 16965
FI1C2 FI1C3 FI1C4 FI1C5 FI1D FI1D1 FI1D2 FI1D3 FI1D5 FI1D7
16965 16965 16965 16965 16965 16965 16965 16965 16965 16965
FI1D8 FI1D9 FI20 FI200 FR FR1 FRB FRC FRD FRE
16965 16965 16965 16965 2394 1064 1064 1064 1064 1064
FRF FRG FRH FRI FRJ FRK FRL FRM FRY1 FRY2
1064 1064 1064 1064 1064 1064 1064 1064 1064 1064
FRY3 FRY4 FRY5 HR HU IE IS IT ITC1 ITC2
1064 1064 1064 9270 6712 6367 5215 7119 570 347
ITC3 ITC4 ITF1 ITF2 ITF3 ITF4 ITF5 ITF6 ITG1 ITG2
486 503 436 337 492 449 393 419 468 389
ITH1 ITH2 ITH3 ITH4 ITH5 ITI1 ITI2 ITI3 ITI4 LI
399 419 486 445 507 437 449 451 506 5070
LT LT01 LT02 LU LV MT NL NO PL PL21
8502 1308 1308 10476 5454 5964 14355 4467 9425 9425
PL22 PL41 PL42 PL43 PL51 PL52 PL61 PL62 PL63 PL71
9425 9425 9425 9425 9425 9425 9425 9425 9425 9425
PL72 PL81 PL82 PL84 PL92X PT PTCSR01 PTCSR02 PTCSR03 PTCSR04
9425 9425 9425 9425 9425 8136 750 756 403 953
PTCSR05 PTCSR06 PTCSR07 RO SE SE11 SE12 SE21 SE22 SE23
1092 278 1048 5867 4673 580 580 580 580 580
SE31 SE32 SE33 SI SK UNK
580 580 580 3131 3710 1197
0 1 2 3 4 5 6 7 8 9 10
AT 17072 0 0 0 0 0 0 0 0 0 0
BE 129 0 0 0 0 0 0 0 0 0 0
BG 423 0 0 0 0 0 0 0 0 0 0
CY 6957 0 0 0 0 0 0 0 0 0 0
CZ 649 0 0 0 0 0 0 0 0 0 0
DE 21 0 0 0 0 0 0 0 0 0 0
DK 4756 0 0 0 0 0 0 0 0 0 0
EE 7603 0 0 0 0 0 0 0 0 0 0
EL 866 0 0 0 0 0 0 0 0 0 0
ES 478 0 0 0 0 0 0 0 0 0 0
FI 0 0 0 0 0 0 0 0 0 0 0
FI19 0 0 0 0 0 0 0 0 0 0 0
FI193 0 0 0 0 0 0 0 0 0 0 0
FI194 0 0 0 0 0 0 0 0 0 0 0
FI195 0 0 0 0 0 0 0 0 0 0 0
FI197 0 0 0 0 0 0 0 0 0 0 0
FI1B 0 0 0 0 0 0 0 0 0 0 0
FI1B1 0 0 0 0 0 0 0 0 0 0 0
FI1C 0 0 0 0 0 0 0 0 0 0 0
FI1C1 0 0 0 0 0 0 0 0 0 0 0
FI1C2 0 0 0 0 0 0 0 0 0 0 0
FI1C3 0 0 0 0 0 0 0 0 0 0 0
FI1C4 0 0 0 0 0 0 0 0 0 0 0
FI1C5 0 0 0 0 0 0 0 0 0 0 0
FI1D 0 0 0 0 0 0 0 0 0 0 0
FI1D1 0 0 0 0 0 0 0 0 0 0 0
FI1D2 0 0 0 0 0 0 0 0 0 0 0
FI1D3 0 0 0 0 0 0 0 0 0 0 0
--- Cropped output ---
FirstDose
Min. : 0
1st Qu.: 0
Median : 0
Mean : 6581
3rd Qu.: 2
Max. :1512566
Error in `table()`:
! attempt to make a table with >= 2^31 elements
When exploring (very) large datasets as in the example above you can find that some functions don’t work because they can’t handle all that data (Error in table(vaccines) : attempt to make a table with >= 2^31 elements). Here, we are going to use alternative methods, more efficient and convenient for reading and handle these large datasets.
One of those tricks is the use of the package data.table, very handy for large datasets. In the following lines, we will compare reading/writting data with the function fread() and fwrite().
Cargando paquete requerido: data.table
Warning: package 'data.table' was built under R version 4.6.1
Adjuntando el paquete: 'data.table'
The following object is masked from 'package:base':
%notin%
user system elapsed
5.89 0.28 6.45
user system elapsed
0.92 0.06 0.39
user system elapsed
0.64 0.00 0.28
user system elapsed
1.33 0.06 0.89
table() vs. xtabs()Tabulating frequencies is a common and efficient way to explore data. While the table() function is versatile and can be used with various data structures (vectors, dataframes, lists…), it might become less convenient for complex cross-tabulations, especially with large datasets. Alternatively, as shown below, the xtabs() function offers a more streamlined approach, particularly for multi-dimensional tables. It leverages a formula-based syntax, allowing for easy specification of variables and automatic generation of row and column labels. Additionally, the data= argument in xtabs() simplifies the process by directly referencing variable names within the dataframe.
AT BE BG CY CZ DE DK EE EL ES FI
17292 7330 6001 7098 6593 564 4821 7755 16413 12960 407160
FR HR HU IE IS IT LI LT LU LV MT
22743 9270 6712 6367 5215 16507 5070 11118 10476 5454 5964
NL NO PL PT RO SE SI SK
14355 4467 160225 13416 5867 9313 3131 3710
'table' int [1:30(1d)] 17292 7330 6001 7098 6593 564 4821 7755 16413 12960 ...
- attr(*, "dimnames")=List of 1
..$ : chr [1:30] "AT" "BE" "BG" "CY" ...
ReportingCountry
AT BE BG CY CZ DE DK EE EL ES FI
17292 7330 6001 7098 6593 564 4821 7755 16413 12960 407160
FR HR HU IE IS IT LI LT LU LV MT
22743 9270 6712 6367 5215 16507 5070 11118 10476 5454 5964
NL NO PL PT RO SE SI SK
14355 4467 160225 13416 5867 9313 3131 3710
'xtabs' int [1:30(1d)] 17292 7330 6001 7098 6593 564 4821 7755 16413 12960 ...
- attr(*, "dimnames")=List of 1
..$ ReportingCountry: chr [1:30] "AT" "BE" "BG" "CY" ...
- attr(*, "call")= language xtabs(formula = ~ReportingCountry, data = vaccines)
So far, they seem very similar in terms of coding and obtained output. However, what about if you want to use to several variables?
AZ BECNBG BHACOV COM COMBA.1 COMBA.4-5 COMBIV COMXBB JANSS MOD
AT 1572 0 0 1572 1572 1572 0 0 1572 1572
BE 920 0 0 1540 640 620 0 0 1160 1320
BG 1500 0 0 1551 0 0 0 0 1400 1550
CY 1130 0 0 1530 264 641 0 0 1153 1108
CZ 581 0 0 1758 433 645 0 32 879 1364
DE 0 0 0 0 0 0 0 0 0 0
DK 600 0 0 1487 406 512 0 0 648 1118
EE 1274 0 0 1351 504 477 0 0 1169 1306
EL 2320 0 0 2413 2320 2372 0 0 2348 2320
ES 2160 0 0 2160 0 0 2160 0 2160 2160
FI 45240 0 0 45240 45240 45240 0 0 45240 45240
FR 133 0 0 133 0 133 0 0 133 133
HR 1410 0 0 2175 0 0 0 0 2025 1950
HU 701 1130 0 1426 495 0 0 0 1266 1180
IE 704 0 0 1794 533 711 0 0 550 1069
IS 646 0 0 1736 492 411 0 0 877 809
IT 1318 0 0 4176 1464 1591 0 0 1737 3079
LI 0 0 0 1430 500 0 0 0 1040 1430
LT 2346 0 0 2465 0 0 0 0 2176 2414
LU 1668 0 0 1740 672 852 0 48 1560 1704
LV 465 0 0 1275 415 434 0 0 854 1016
MT 1524 0 0 1549 0 0 0 0 1396 1495
NL 1595 0 0 1595 1595 1595 0 0 1595 1595
--- Cropped output ---
ReportingCountry AZ BECNBG BHACOV COM COMBA.1 COMBA.4-5 COMBIV COMXBB
AT 1572 0 0 1572 1572 1572 0 0
BE 920 0 0 1540 640 620 0 0
BG 1500 0 0 1551 0 0 0 0
CY 1130 0 0 1530 264 641 0 0
CZ 581 0 0 1758 433 645 0 32
DE 0 0 0 0 0 0 0 0
DK 600 0 0 1487 406 512 0 0
EE 1274 0 0 1351 504 477 0 0
EL 2320 0 0 2413 2320 2372 0 0
ES 2160 0 0 2160 0 0 2160 0
FI 45240 0 0 45240 45240 45240 0 0
FR 133 0 0 133 0 133 0 0
HR 1410 0 0 2175 0 0 0 0
HU 701 1130 0 1426 495 0 0 0
IE 704 0 0 1794 533 711 0 0
IS 646 0 0 1736 492 411 0 0
IT 1318 0 0 4176 1464 1591 0 0
LI 0 0 0 1430 500 0 0 0
LT 2346 0 0 2465 0 0 0 0
LU 1668 0 0 1740 672 852 0 48
LV 465 0 0 1275 415 434 0 0
MT 1524 0 0 1549 0 0 0 0
NL 1595 0 0 1595 1595 1595 0 0
--- Cropped output ---
as.factor(Vaccine)
ReportingCountry AZ BECNBG BHACOV COM COMBA.1 COMBA.4-5 COMBIV COMXBB
AT 1572 0 0 1572 1572 1572 0 0
BE 920 0 0 1540 640 620 0 0
BG 1500 0 0 1551 0 0 0 0
CY 1130 0 0 1530 264 641 0 0
CZ 581 0 0 1758 433 645 0 32
DE 0 0 0 0 0 0 0 0
DK 600 0 0 1487 406 512 0 0
EE 1274 0 0 1351 504 477 0 0
EL 2320 0 0 2413 2320 2372 0 0
ES 2160 0 0 2160 0 0 2160 0
FI 45240 0 0 45240 45240 45240 0 0
FR 133 0 0 133 0 133 0 0
HR 1410 0 0 2175 0 0 0 0
HU 701 1130 0 1426 495 0 0 0
IE 704 0 0 1794 533 711 0 0
IS 646 0 0 1736 492 411 0 0
IT 1318 0 0 4176 1464 1591 0 0
LI 0 0 0 1430 500 0 0 0
LT 2346 0 0 2465 0 0 0 0
LU 1668 0 0 1740 672 852 0 48
LV 465 0 0 1275 415 434 0 0
MT 1524 0 0 1549 0 0 0 0
NL 1595 0 0 1595 1595 1595 0 0
--- Cropped output ---
As mentioned above, xtabs() can be easily used with more than two variables. Moreover, you can create a cross-tabulated table using a numeric variable instead of frequencies. To do so, you just need to use the left side of the formula.
, , as.factor(TargetGroup) = 1_Age<60
as.factor(Vaccine)
ReportingCountry AZ BECNBG BHACOV COM COMBA.1 COMBA.4-5
AT 0 0 0 0 0 0
BE 0 0 0 0 0 0
BG 0 0 0 0 0 0
CY 0 0 0 0 0 0
CZ 0 0 0 0 0 0
DE 0 0 0 0 0 0
DK 0 0 0 0 0 0
EE 0 0 0 0 0 0
EL 0 0
ES 0 0 0 0 0 0
FI 0 0 0 0 0 0
FR 0 0 0 0 0 0
HR 0 0 0 0 0 0
HU 0 0 0 0 0 0
IE 0 0 0 0 0 0
IS 0 0 0 0 0 0
IT 0 0 0 0 0 0
LI 0 0 0 0 0 0
LT 0 0 0 0 0 0
LU 0 0 0 0 0 0
LV 0 0 0 0 0 0
MT 0 0 0 0 0 0
NL 0 0 0 0 0 0
NO 0 0 0 0 0 0
PL 0 0 0 0 0 0
PT 0 0 0 0 0 0
RO 0 0 0 0
SE 0 0 0 0 0 0
SI 0 0 0 0 0 0
SK 0 0 0 0 0 0
as.factor(Vaccine)
ReportingCountry COMBIV COMXBB JANSS MOD MODBA.1 MODBA.4-5
AT 0 0 0 0 0 0
BE 0 0 0 0 0 0
BG 0 0 0 0 0 0
CY 0 0 0 0 0 0
CZ 0 0 0 0 0 0
DE 0 0 0 0 0 0
DK 0 0 0 0 0 0
EE 0 0 0 0 0 0
EL 0 0 0 0
ES 0 0 0 0 0 0
FI 0 0 0 0 0 0
FR 0 0 0 0 0 0
HR 0 0 0 0 0 0
HU 0 0 0 0 0 0
--- Cropped output ---
That was a very long output to check! If you want to show your tabulated data in a more useful format, you can convert the cross-tabulated data into a flat table with ftable(). See the examples below and try to understand how the row.bars statement works.
ReportingCountry AT BE BG CY CZ DE DK EE EL ES FI FR HR HU IE IS IT LI LT LU LV MT NL NO PL PT RO SE SI SK
as.factor(Vaccine)
AZ 1572 920 1500 1130 581 0 600 1274 2320 2160 45240 133 1410 701 704 646 1318 0 2346 1668 465 1524 1595 602 32045 1548 1417 2320 376 274
BECNBG 0 0 0 0 0 0 0 0 0 0 0 0 0 1130 0 0 0 0 0 0 0 0 0 0 0 1212 0 0 0 0
BHACOV 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 344 0 0 0 0
COM 1572 1540 1551 1530 1758 0 1487 1351 2413 2160 45240 133 2175 1426 1794 1736 4176 1430 2465 1740 1275 1549 1595 1248 32045 2480 1549 2320 1022 1308
COMBA.1 1572 640 0 264 433 0 406 504 2320 0 45240 0 0 495 533 492 1464 500 0 672 415 0 1595 305 0 864 0 0 0 0
COMBA.4-5 1572 620 0 641 645 0 512 477 2372 0 45240 133 0 0 711 411 1591 0 0 852 434 0 1595 436 0 1267 0 0 0 0
COMBIV 0 0 0 0 0 0 0 0 0 2160 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 373 0
COMXBB 0 0 0 0 32 0 0 0 0 0 0 0 0 0 0 0 0 0 0 48 0 0 0 0 0 0 0 0 3 0
JANSS 1572 1160 1400 1153 879 0 648 1169 2348 2160 45240 133 2025 1266 550 877 1737 1040 2176 1560 854 1396 1595 438 32045 1410 1362 0 328 610
MOD 1572 1320 1550 1108 1364 0 1118 1306 2320 2160 45240 133 1950 1180 1069 809 3079 1430 2414 1704 1016 1495 1595 1002 32045 1672 1539 2320 718 809
MODBA.1 1572 460 0 264 350 0 0 504 0 0 0 133 0 0 363 4 850 510 0 672 318 0 1595 150 0 587 0 0 0 0
MODBA.4-5 0 0 0 432 69 0 0 414 0 0 0 133 0 0 225 29 732 0 0 552 3 0 0 286 0 128 0 0 0 0
MODBIV 0 0 0 0 0 0 0 0 0 2160 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 157 0
NVXD 1572 670 0 576 443 0 0 756 2320 0 45240 133 465 0 418 91 1415 160 0 1008 227 0 1595 0 32045 441 0 2320 151 239
SGSK 1572 0 0 0 39 0 0 0 0 0 0 133 0 0 0 0 145 0 0 0 3 0 0 0 0 78 0 0 3 0
SIN 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1385 0 0 0 0
SPU 0 0 0 0 0 0 0 0 0 0 0 0 0 514 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 167
UNK 1572 0 0 0 0 564 50 0 0 0 45240 21546 1245 0 0 120 0 0 1717 0 444 0 1595 0 0 0 0 33 0 303
VLA 1572 0 0 0 0 0 0 0 0 0 45240 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
NA
NA
NA
NA
--- Cropped output ---
ReportingCountry AT BE BG CY CZ DE DK EE EL ES FI FR HR HU IE IS IT LI LT LU LV MT NL NO PL PT RO SE SI SK
as.factor(TargetGroup) 1_Age<60 1_Age60+ Age<18 Age0_4 Age10_14 Age15_17 Age18_24 Age25_49 Age5_9 Age50_59 Age60_69 Age70_79 Age80+ AgeUNK ALL HCW LTCF 1_Age<60 1_Age60+ Age<18 Age0_4 Age10_14 Age15_17 Age18_24 Age25_49 Age5_9 Age50_59 Age60_69 Age70_79 Age80+ AgeUNK ALL HCW LTCF 1_Age<60 1_Age60+ Age<18 Age0_4 Age10_14 Age15_17 Age18_24 Age25_49 Age5_9 Age50_59 Age60_69 Age70_79 Age80+ AgeUNK ALL HCW LTCF 1_Age<60 1_Age60+ Age<18 Age0_4 Age10_14 Age15_17 Age18_24 Age25_49 Age5_9 Age50_59 Age60_69 Age70_79 Age80+ AgeUNK ALL HCW LTCF 1_Age<60 1_Age60+ Age<18 Age0_4 Age10_14 Age15_17 Age18_24 Age25_49 Age5_9 Age50_59 Age60_69 Age70_79 Age80+ AgeUNK ALL HCW LTCF 1_Age<60 1_Age60+ Age<18 Age0_4 Age10_14 Age15_17 Age18_24 Age25_49 Age5_9 Age50_59 Age60_69 Age70_79 Age80+ AgeUNK ALL HCW LTCF 1_Age<60 1_Age60+ Age<18 Age0_4 Age10_14 Age15_17 Age18_24 Age25_49 Age5_9 Age50_59 Age60_69 Age70_79 Age80+ AgeUNK ALL HCW LTCF 1_Age<60 1_Age60+ Age<18 Age0_4 Age10_14 Age15_17 Age18_24 Age25_49 Age5_9 Age50_59 Age60_69 Age70_79 Age80+ AgeUNK ALL HCW LTCF 1_Age<60 1_Age60+ Age<18 Age0_4 Age10_14 Age15_17 Age18_24 Age25_49 Age5_9 Age50_59 Age60_69 Age70_79 Age80+ AgeUNK ALL HCW LTCF 1_Age<60 1_Age60+ Age<18 Age0_4 Age10_14 Age15_17 Age18_24 Age25_49 Age5_9 Age50_59 Age60_69 Age70_79 Age80+ AgeUNK ALL HCW LTCF 1_Age<60 1_Age60+ Age<18 Age0_4 Age10_14 Age15_17 Age18_24 Age25_49 Age5_9 Age50_59 Age60_69 Age70_79 Age80+ AgeUNK ALL HCW LTCF 1_Age<60 1_Age60+ Age<18 Age0_4 Age10_14 Age15_17 Age18_24 Age25_49 Age5_9 Age50_59 Age60_69 Age70_79 Age80+ AgeUNK ALL HCW LTCF 1_Age<60 1_Age60+ Age<18 Age0_4 Age10_14 Age15_17 Age18_24 Age25_49 Age5_9 Age50_59 Age60_69 Age70_79 Age80+ AgeUNK ALL HCW LTCF 1_Age<60 1_Age60+ Age<18 Age0_4 Age10_14 Age15_17 Age18_24 Age25_49 Age5_9 Age50_59 Age60_69 Age70_79 Age80+ AgeUNK ALL HCW LTCF 1_Age<60 1_Age60+ Age<18 Age0_4 Age10_14 Age15_17 Age18_24 Age25_49 Age5_9 Age50_59 Age60_69 Age70_79 Age80+ AgeUNK ALL HCW LTCF 1_Age<60 1_Age60+ Age<18 Age0_4 Age10_14 Age15_17 Age18_24 Age25_49 Age5_9 Age50_59 Age60_69 Age70_79 Age80+ AgeUNK ALL HCW LTCF 1_Age<60 1_Age60+ Age<18 Age0_4 Age10_14 Age15_17 Age18_24 Age25_49 Age5_9 Age50_59 Age60_69 Age70_79 Age80+ AgeUNK ALL HCW LTCF 1_Age<60 1_Age60+ Age<18 Age0_4 Age10_14 Age15_17 Age18_24 Age25_49 Age5_9 Age50_59 Age60_69 Age70_79 Age80+ AgeUNK ALL HCW LTCF 1_Age<60 1_Age60+ Age<18 Age0_4 Age10_14 Age15_17 Age18_24 Age25_49 Age5_9 Age50_59 Age60_69 Age70_79 Age80+ AgeUNK ALL HCW LTCF 1_Age<60 1_Age60+ Age<18 Age0_4 Age10_14 Age15_17 Age18_24 Age25_49 Age5_9 Age50_59 Age60_69 Age70_79 Age80+ AgeUNK ALL HCW LTCF 1_Age<60 1_Age60+ Age<18 Age0_4 Age10_14 Age15_17 Age18_24 Age25_49 Age5_9 Age50_59 Age60_69 Age70_79 Age80+ AgeUNK ALL HCW LTCF 1_Age<60 1_Age60+ Age<18 Age0_4 Age10_14 Age15_17 Age18_24 Age25_49 Age5_9 Age50_59 Age60_69 Age70_79 Age80+ AgeUNK ALL HCW LTCF 1_Age<60 1_Age60+ Age<18 Age0_4 Age10_14 Age15_17 Age18_24 Age25_49 Age5_9 Age50_59 Age60_69 Age70_79 Age80+ AgeUNK ALL HCW LTCF 1_Age<60 1_Age60+ Age<18 Age0_4 Age10_14 Age15_17 Age18_24 Age25_49 Age5_9 Age50_59 Age60_69 Age70_79 Age80+ AgeUNK ALL HCW LTCF 1_Age<60 1_Age60+ Age<18 Age0_4 Age10_14 Age15_17 Age18_24 Age25_49 Age5_9 Age50_59 Age60_69 Age70_79 Age80+ AgeUNK ALL HCW LTCF 1_Age<60 1_Age60+ Age<18 Age0_4 Age10_14 Age15_17 Age18_24 Age25_49 Age5_9 Age50_59 Age60_69 Age70_79 Age80+ AgeUNK ALL HCW LTCF 1_Age<60 1_Age60+ Age<18 Age0_4 Age10_14 Age15_17 Age18_24 Age25_49 Age5_9 Age50_59 Age60_69 Age70_79 Age80+ AgeUNK ALL HCW LTCF 1_Age<60 1_Age60+ Age<18 Age0_4 Age10_14 Age15_17 Age18_24 Age25_49 Age5_9 Age50_59 Age60_69 Age70_79 Age80+ AgeUNK ALL HCW LTCF 1_Age<60 1_Age60+ Age<18 Age0_4 Age10_14 Age15_17 Age18_24 Age25_49 Age5_9 Age50_59 Age60_69 Age70_79 Age80+ AgeUNK ALL HCW LTCF 1_Age<60 1_Age60+ Age<18 Age0_4 Age10_14 Age15_17 Age18_24 Age25_49 Age5_9 Age50_59 Age60_69 Age70_79 Age80+ AgeUNK ALL HCW LTCF
as.factor(Vaccine)
AZ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 5519600 0 0 0 0 NA 0 0 0 NA NA 0 NA NA NA NA NA NA NA NA 0 0 NA 0 0 0 NA NA 0 NA NA NA NA NA NA NA NA 0 0 0 0 0 0 0 0 0 0 0 0 0 0 432300 0 0 0 0 NA 0 0 NA NA NA 0 NA NA NA NA 0 1628400 NA NA 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 202920 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 818300 0 0 NA NA NA NA NA NA NA NA NA NA NA NA NA NA 4035800 NA 0 0 0 NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA 0 0 NA NA NA NA NA NA NA NA NA NA NA NA NA 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 10355500 0 0 0 0 NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA 0 0 NA 0 0 0 NA NA 0 NA NA NA NA NA 6513800 NA NA 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1442700 0 0 0 0 0 97800 97800 97800 97800 97800 97800 97800 97800 97800 97800 97800 100880 97800 97800 0 0 NA 0 0 0 NA NA 0 NA NA NA NA 0 NA NA NA 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1121594 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 186600 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1273400 0 0 0 0 NA 0 0 0 NA NA 0 NA NA NA NA NA NA NA NA 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4503400 0 0 0 0 NA 0 0 0 NA NA 0 NA NA NA NA 0 578400 NA 0 0 0 0 NA NA NA NA NA NA NA NA NA NA NA NA NA 0 0 0 0 NA NA NA NA NA NA NA NA NA NA NA NA 0 0 NA NA 0 0 0 0 NA NA 0 NA NA NA NA 0 2999600 NA NA 0 0 0 0 0 NA NA NA 0 NA NA NA NA 0 NA 0 0 0 0 NA 0 0 0 NA NA 0 NA NA NA NA 0 1123800 NA 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1612810 0 0
BECNBG 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 NA 0 0 0 NA NA 0 NA NA NA NA NA 5187056 NA NA 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 NA NA NA NA NA NA NA NA NA NA NA NA 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
BHACOV 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 NA NA NA NA NA NA 0 NA NA NA NA NA 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
COM 0 0 0 0 0 0 0 0 0 0 0 0 0 0 24394773 0 0 0 0 NA 0 0 0 NA NA 0 NA NA NA NA NA NA NA NA 0 0 NA 0 0 0 NA NA 0 NA NA NA NA NA 7265580 NA NA 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2033293 0 0 0 0 NA NA NA NA NA NA NA NA NA NA NA 0 21204560 NA NA 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 7614360 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2304060 0 0 NA NA NA NA NA NA NA NA NA NA NA NA NA NA 25348740 NA NA 0 0 NA NA NA NA NA NA NA NA NA NA NA NA 100959011 NA NA 0 0 NA NA NA NA NA NA NA NA NA NA NA NA NA 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 136804000 0 0 0 0 NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA 0 0 NA 0 0 0 NA NA 0 NA NA NA NA NA 13163840 NA NA 0 0 0 0 0 0 0 0 0 0 0 0 0 0 11135050 0 0 0 0 0 NA NA NA NA NA NA NA NA NA NA NA 794870 NA NA 0 0 NA 0 0 0 NA NA 0 NA NA NA NA 0 NA NA NA 0 0 0 0 0 0 763 0 0 0 0 0 0 0 22650 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 6789378 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1346640 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 3001755 0 0 0 0 NA 0 0 0 NA NA 0 NA NA NA NA NA NA NA NA 0 0 0 0 0 0 0 0 0 0 0 0 0 0 34003726 0 0 0 0 NA 0 0 0 NA NA 0 NA NA NA NA 0 11373105 NA 0 0 0 0 NA NA NA NA NA NA NA NA NA NA NA NA NA 0 0 0 0 NA NA NA NA NA NA NA NA NA NA NA NA 0 0 NA NA NA 0 0 0 NA NA 0 NA NA NA NA 0 18276235 NA NA 0 0 0 0 0 NA NA NA 0 NA NA NA NA 0 NA 0 0 0 0 NA 0 0 0 NA NA 0 NA NA NA NA 0 3987390 NA 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 7723560 0 0
COMBA.1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1512000 0 0 0 0 NA 0 0 0 NA NA 0 NA NA NA NA NA NA NA NA 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 NA 0 NA NA NA NA NA NA NA NA NA 0 1321920 NA NA 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 279360 0 0 NA NA NA NA NA NA NA NA NA NA NA NA NA NA 800640 NA 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 NA NA NA NA NA NA NA NA NA NA NA NA NA 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 NA 0 0 0 NA NA 0 NA NA NA NA NA 216000 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 NA NA NA NA NA NA NA NA NA NA NA 126720 NA NA 0 0 NA 0 0 0 NA NA 0 NA NA NA NA 0 NA NA NA 0 0 0 0 0 0 1020 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 86400 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 460800 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2871360 0 0 0 0 NA 0 0 0 NA NA 0 NA NA NA NA 0 889920 NA 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 NA NA NA NA NA NA NA NA NA NA NA NA 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
COMBA.4-5 0 0 0 0 0 0 0 0 0 0 0 0 0 0 5530560 0 0 0 0 NA 0 0 0 NA NA 0 NA NA NA NA NA NA NA NA 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 37440 0 0 0 0 NA 0 NA NA NA NA NA NA NA NA NA 0 5135040 NA NA 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 350400 0 0 NA NA NA NA NA NA NA NA NA NA NA NA NA NA 1428480 NA NA 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 NA NA NA NA NA NA NA NA NA NA NA NA NA 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 23481600 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 NA NA NA NA NA NA NA NA NA NA NA 100800 NA NA 0 0 NA 0 0 0 NA NA 0 NA NA NA NA 0 NA NA NA 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 168000 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1088640 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 6325440 0 0 0 0 NA 0 0 0 NA NA 0 NA NA NA NA 0 2453760 NA 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 NA NA NA NA NA NA NA NA NA NA NA NA 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
COMBIV 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 NA 0 0 0 NA NA 0 NA NA NA NA 0 800640 NA 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
COMXBB 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 NA 0 NA NA NA NA 0 NA NA NA NA 0 97920 NA NA 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 18240 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 58560 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
JANSS 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1292400 0 0 0 0 NA 0 0 0 NA NA 0 NA NA NA NA NA NA NA NA 0 0 NA 0 0 0 NA NA 0 NA NA NA NA NA NA NA NA 0 0 0 0 0 0 0 0 0 0 0 0 0 0 190100 0 0 0 0 NA 0 NA NA NA NA 0 NA NA NA NA 0 1396200 NA NA 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 42300 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 120800 0 0 NA NA NA NA NA NA NA NA NA NA NA NA NA NA 2401800 NA NA 0 0 NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA 0 0 NA NA NA NA NA NA NA NA NA NA NA NA NA 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 3732300 0 0 0 0 NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA 0 0 NA 0 0 0 NA NA 0 NA NA NA NA NA 4309200 NA NA 0 0 0 0 0 0 0 0 0 0 0 0 0 0 281500 0 0 0 0 0 NA NA NA NA NA NA NA NA NA NA NA 57500 NA NA 0 0 NA 0 0 0 NA NA 0 NA NA NA NA 0 NA NA NA 0 0 0 0 0 0 0 0 0 0 0 0 0 0 650 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 653097 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 80250 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1259800 0 0 0 0 NA 0 0 0 NA NA 0 NA NA NA NA NA NA NA NA 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2464800 0 0 0 0 NA 0 0 0 NA NA 0 NA NA NA NA 0 403900 NA 0 0 0 0 NA NA NA NA NA NA NA NA NA NA NA NA NA 0 0 0 0 NA NA NA NA NA NA NA NA NA NA NA NA 0 0 NA NA 0 0 0 0 NA NA 0 NA NA NA NA 0 2820300 NA NA 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 NA 0 0 0 NA NA 0 NA NA NA NA 0 230400 NA 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 475200 0 0
MOD 0 0 0 0 0 0 0 0 0 0 0 0 0 0 5963500 0 0 0 0 NA 0 0 0 NA NA 0 NA NA NA NA NA NA NA NA 0 0 NA 0 0 0 NA NA 0 NA NA NA NA NA NA NA NA 0 0 0 0 0 0 0 0 0 0 0 0 0 0 155200 0 0 0 0 NA 0 NA NA NA NA 0 NA NA NA NA 0 3685100 NA NA 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1350690 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 270400 0 0 NA NA NA NA NA NA NA NA NA NA NA NA NA NA 1770000 NA 0 0 0 NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA 0 0 NA NA NA NA NA NA NA NA NA NA NA NA NA 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 54929280 0 0 0 0 NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA 0 0 NA 0 0 0 NA NA 0 NA NA NA NA NA 1736400 NA NA 0 0 0 0 0 0 0 0 0 0 0 0 0 0 3290500 0 0 0 0 0 NA NA NA NA NA NA NA NA NA NA NA 261720 NA NA 0 0 NA 0 0 0 NA NA 0 NA NA NA NA 0 NA NA NA 0 0 0 0 0 0 680 0 0 0 0 0 0 0 44500 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 732830 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 302610 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1171300 0 0 0 0 NA 0 0 0 NA NA 0 NA NA NA NA NA NA NA NA 0 0 0 0 0 0 0 0 0 0 0 0 0 0 11327200 0 0 0 0 NA 0 0 0 NA NA 0 NA NA NA NA 0 3982600 NA 0 0 0 0 NA NA NA NA NA NA NA NA NA NA NA NA NA 0 0 0 0 NA NA NA NA NA NA NA NA NA NA NA NA 0 0 NA NA NA 0 0 0 NA NA 0 NA NA NA NA 0 2805700 NA NA 0 0 0 0 0 NA NA NA 0 NA NA NA NA 0 NA 0 0 0 0 NA 0 0 0 NA NA 0 NA NA NA NA 0 714400 NA 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 871200 0 0
MODBA.1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2474610 0 0 0 0 NA 0 0 0 NA NA 0 NA NA NA NA NA NA NA NA 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 24250 0 0 0 0 NA 0 NA NA NA NA 0 NA NA NA NA 0 199700 NA NA 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 192750 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 8321200 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 65350 0 0 0 0 NA 0 0 0 NA NA 0 NA NA NA NA 0 NA NA NA 0 0 0 0 0 0 2505 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 303240 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 543980 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 6175700 0 0 0 0 0 0 0 0 NA NA 0 NA NA NA NA 0 1443150 NA 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 NA NA NA NA 0 NA NA NA NA NA NA 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
MODBA.4-5 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 9500 0 0 0 0 0 0 0 0 NA NA 0 NA NA NA NA 0 46750 NA 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 98400 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 3315650 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 98350 0 0 0 0 NA 0 0 0 NA NA 0 NA NA NA NA 0 NA NA NA 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 243300 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 123600 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 NA NA 0 NA NA NA NA 0 2271400 NA 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 NA NA 0 NA NA NA 0 0 NA 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
MODBIV 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 NA NA 0 NA NA NA NA 0 705400 NA 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
NVXD 0 0 0 0 0 0 0 0 0 0 0 0 0 0 3192000 0 0 0 0 NA 0 0 0 NA NA 0 NA NA NA NA NA NA NA NA 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 90000 0 0 0 0 NA 0 NA NA NA NA 0 NA NA NA NA 0 578000 NA NA 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 60800 0 0 NA NA NA NA NA NA NA NA NA NA NA NA NA NA 396000 NA 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 NA NA NA NA NA NA NA NA NA NA NA NA NA 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2965000 0 0 0 0 NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 198000 0 0 0 0 0 NA NA NA NA NA NA NA NA NA NA NA 42000 NA NA 0 0 NA 0 0 0 NA NA 0 NA NA NA NA 0 NA NA NA 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 105000 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 189600 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 707000 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 NA NA NA NA NA NA NA NA NA NA NA NA NA 0 0 0 0 NA NA NA NA NA NA NA NA NA NA 0 NA 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 NA NA NA 0 NA NA NA NA 0 NA 0 0 0 0 NA 0 0 0 NA NA 0 NA NA NA NA 0 94000 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 93000 0 0
SGSK 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2243300 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 64800 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 16576400 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 NA 0 0 0 NA NA 0 NA NA NA NA 0 NA NA NA 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 108000 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 NA NA NA NA NA NA NA 0 NA 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 NA 0 0 0 0 115200 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
SIN 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 NA NA NA NA NA NA NA NA NA NA NA NA 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
SPU 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 NA 0 0 0 NA NA 0 NA NA NA NA NA 2000000 NA NA 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 200000 0 0
UNK 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 NA NA NA 0 0 0 0 0 0 0 0 0 0 0 241419933 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 NA NA NA NA NA NA NA NA NA NA NA NA NA 0 0 0 0 NA 0 0 0 NA NA 0 NA NA NA NA NA NA 0 0 0 0 NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 10162 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 NA NA 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
VLA 0 0 0 0 0 0 0 0 0 0 0 0 0 0 151200 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 NA NA NA NA NA NA NA NA NA NA NA NA NA 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
NA
NA
NA
--- Cropped output ---
ReportingCountry AT BE BG CY CZ DE DK EE EL ES FI FR HR HU IE IS IT LI LT LU LV MT NL NO PL PT RO SE SI SK
as.factor(Vaccine) AZ BECNBG BHACOV COM COMBA.1 COMBA.4-5 COMBIV COMXBB JANSS MOD MODBA.1 MODBA.4-5 MODBIV NVXD SGSK SIN SPU UNK VLA AZ BECNBG BHACOV COM COMBA.1 COMBA.4-5 COMBIV COMXBB JANSS MOD MODBA.1 MODBA.4-5 MODBIV NVXD SGSK SIN SPU UNK VLA AZ BECNBG BHACOV COM COMBA.1 COMBA.4-5 COMBIV COMXBB JANSS MOD MODBA.1 MODBA.4-5 MODBIV NVXD SGSK SIN SPU UNK VLA AZ BECNBG BHACOV COM COMBA.1 COMBA.4-5 COMBIV COMXBB JANSS MOD MODBA.1 MODBA.4-5 MODBIV NVXD SGSK SIN SPU UNK VLA AZ BECNBG BHACOV COM COMBA.1 COMBA.4-5 COMBIV COMXBB JANSS MOD MODBA.1 MODBA.4-5 MODBIV NVXD SGSK SIN SPU UNK VLA AZ BECNBG BHACOV COM COMBA.1 COMBA.4-5 COMBIV COMXBB JANSS MOD MODBA.1 MODBA.4-5 MODBIV NVXD SGSK SIN SPU UNK VLA AZ BECNBG BHACOV COM COMBA.1 COMBA.4-5 COMBIV COMXBB JANSS MOD MODBA.1 MODBA.4-5 MODBIV NVXD SGSK SIN SPU UNK VLA AZ BECNBG BHACOV COM COMBA.1 COMBA.4-5 COMBIV COMXBB JANSS MOD MODBA.1 MODBA.4-5 MODBIV NVXD SGSK SIN SPU UNK VLA AZ BECNBG BHACOV COM COMBA.1 COMBA.4-5 COMBIV COMXBB JANSS MOD MODBA.1 MODBA.4-5 MODBIV NVXD SGSK SIN SPU UNK VLA AZ BECNBG BHACOV COM COMBA.1 COMBA.4-5 COMBIV COMXBB JANSS MOD MODBA.1 MODBA.4-5 MODBIV NVXD SGSK SIN SPU UNK VLA AZ BECNBG BHACOV COM COMBA.1 COMBA.4-5 COMBIV COMXBB JANSS MOD MODBA.1 MODBA.4-5 MODBIV NVXD SGSK SIN SPU UNK VLA AZ BECNBG BHACOV COM COMBA.1 COMBA.4-5 COMBIV COMXBB JANSS MOD MODBA.1 MODBA.4-5 MODBIV NVXD SGSK SIN SPU UNK VLA AZ BECNBG BHACOV COM COMBA.1 COMBA.4-5 COMBIV COMXBB JANSS MOD MODBA.1 MODBA.4-5 MODBIV NVXD SGSK SIN SPU UNK VLA AZ BECNBG BHACOV COM COMBA.1 COMBA.4-5 COMBIV COMXBB JANSS MOD MODBA.1 MODBA.4-5 MODBIV NVXD SGSK SIN SPU UNK VLA AZ BECNBG BHACOV COM COMBA.1 COMBA.4-5 COMBIV COMXBB JANSS MOD MODBA.1 MODBA.4-5 MODBIV NVXD SGSK SIN SPU UNK VLA AZ BECNBG BHACOV COM COMBA.1 COMBA.4-5 COMBIV COMXBB JANSS MOD MODBA.1 MODBA.4-5 MODBIV NVXD SGSK SIN SPU UNK VLA AZ BECNBG BHACOV COM COMBA.1 COMBA.4-5 COMBIV COMXBB JANSS MOD MODBA.1 MODBA.4-5 MODBIV NVXD SGSK SIN SPU UNK VLA AZ BECNBG BHACOV COM COMBA.1 COMBA.4-5 COMBIV COMXBB JANSS MOD MODBA.1 MODBA.4-5 MODBIV NVXD SGSK SIN SPU UNK VLA AZ BECNBG BHACOV COM COMBA.1 COMBA.4-5 COMBIV COMXBB JANSS MOD MODBA.1 MODBA.4-5 MODBIV NVXD SGSK SIN SPU UNK VLA AZ BECNBG BHACOV COM COMBA.1 COMBA.4-5 COMBIV COMXBB JANSS MOD MODBA.1 MODBA.4-5 MODBIV NVXD SGSK SIN SPU UNK VLA AZ BECNBG BHACOV COM COMBA.1 COMBA.4-5 COMBIV COMXBB JANSS MOD MODBA.1 MODBA.4-5 MODBIV NVXD SGSK SIN SPU UNK VLA AZ BECNBG BHACOV COM COMBA.1 COMBA.4-5 COMBIV COMXBB JANSS MOD MODBA.1 MODBA.4-5 MODBIV NVXD SGSK SIN SPU UNK VLA AZ BECNBG BHACOV COM COMBA.1 COMBA.4-5 COMBIV COMXBB JANSS MOD MODBA.1 MODBA.4-5 MODBIV NVXD SGSK SIN SPU UNK VLA AZ BECNBG BHACOV COM COMBA.1 COMBA.4-5 COMBIV COMXBB JANSS MOD MODBA.1 MODBA.4-5 MODBIV NVXD SGSK SIN SPU UNK VLA AZ BECNBG BHACOV COM COMBA.1 COMBA.4-5 COMBIV COMXBB JANSS MOD MODBA.1 MODBA.4-5 MODBIV NVXD SGSK SIN SPU UNK VLA AZ BECNBG BHACOV COM COMBA.1 COMBA.4-5 COMBIV COMXBB JANSS MOD MODBA.1 MODBA.4-5 MODBIV NVXD SGSK SIN SPU UNK VLA AZ BECNBG BHACOV COM COMBA.1 COMBA.4-5 COMBIV COMXBB JANSS MOD MODBA.1 MODBA.4-5 MODBIV NVXD SGSK SIN SPU UNK VLA AZ BECNBG BHACOV COM COMBA.1 COMBA.4-5 COMBIV COMXBB JANSS MOD MODBA.1 MODBA.4-5 MODBIV NVXD SGSK SIN SPU UNK VLA AZ BECNBG BHACOV COM COMBA.1 COMBA.4-5 COMBIV COMXBB JANSS MOD MODBA.1 MODBA.4-5 MODBIV NVXD SGSK SIN SPU UNK VLA AZ BECNBG BHACOV COM COMBA.1 COMBA.4-5 COMBIV COMXBB JANSS MOD MODBA.1 MODBA.4-5 MODBIV NVXD SGSK SIN SPU UNK VLA
as.factor(TargetGroup)
1_Age<60 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 NA 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 NA 0 0 NA NA NA 0 0 NA NA 0 0 0 NA 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 NA 0 0 NA 0 0 0 0 NA NA 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
1_Age60+ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 NA 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 NA 0 0 NA NA NA 0 0 NA NA 0 0 0 NA 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 NA 0 0 NA 0 0 0 0 NA NA 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Age<18 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 NA 0 0 NA NA NA 0 0 NA NA NA 0 0 NA 0 0 0 0 0 NA 0 0 NA 0 0 0 0 NA NA 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 NA 0 0 NA NA NA 0 NA NA NA NA 0 0 NA 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 NA 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 NA 0 0 NA NA NA 0 0 NA NA 0 0 0 NA 0 0 0 0 0 NA 0 0 NA 0 0 NA 0 NA NA 0 0 NA 0 0 0 0 0 0 NA 0 0 NA NA NA 0 0 NA NA 0 0 0 NA 0 0 0 NA NA 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 NA 0 NA 0 0 NA 0 0 0 0 NA NA 0 0 0 NA 0 0 0 NA 0 NA NA 0 NA NA 0 0 0 NA NA 0 0 0 0 0 0 NA 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 NA 0 0 NA NA NA 0 0 NA NA NA NA 0 NA NA 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 NA 0 0 NA 0 0 0 0 NA NA 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 NA 0 0 NA NA NA 0 0 NA NA 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 NA 0 0 0 0 0 NA 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 NA 0 0 NA 0 0 NA 0 NA NA 0 0 0 NA 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Age0_4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 NA 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 NA 0 0 NA NA NA 0 0 NA NA 0 0 0 NA 0 0 0 0 0 NA 0 0 NA 0 0 NA 0 NA NA 0 0 NA 0 0 0 0 0 0 NA 0 0 NA NA NA 0 0 NA NA 0 0 0 NA 0 0 0 NA NA 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 NA 0 0 NA 0 0 0 0 NA NA 0 0 0 NA 0 0 0 NA 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 97800 0 0 NA NA NA 0 0 NA NA 0 0 0 NA 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 NA 0 0 NA 0 0 0 0 NA NA 0 0 0 NA 0 0 0 0 0 NA NA NA NA NA NA 0 0 NA NA 0 0 0 NA 0 NA 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Age10_14 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 NA NA NA 0 NA NA NA NA 0 0 NA 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 NA 0 0 NA NA NA 0 0 NA NA 0 0 0 NA 0 0 0 0 0 NA 0 0 NA 0 0 NA 0 NA NA 0 0 NA 0 0 0 0 0 0 NA 0 0 NA NA NA 0 0 NA NA 0 0 0 NA 0 0 0 NA NA 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 NA 0 0 NA 0 0 0 0 NA NA 0 0 0 NA 0 0 0 NA 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 97800 0 0 NA NA NA 0 0 NA NA 0 0 0 NA 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 NA 0 0 NA 0 0 0 0 NA NA 0 0 0 NA 0 0 0 0 0 NA NA NA NA NA NA 0 0 NA NA NA 0 0 NA 0 NA 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Age15_17 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 NA 0 0 NA NA NA 0 NA NA NA NA 0 0 NA 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 NA 0 0 NA NA NA 0 0 NA NA 0 0 0 NA 0 0 0 0 0 NA 0 0 NA 0 0 NA 0 NA NA 0 0 NA 0 0 0 0 0 0 NA 0 0 NA NA NA 0 0 NA NA 0 0 0 NA 0 0 0 NA NA 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 NA 0 0 NA 0 0 0 0 NA NA 0 0 0 NA 0 0 0 NA 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 97800 0 0 NA NA NA 0 0 NA NA 0 0 0 NA 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 NA 0 0 NA 0 0 0 0 NA NA 0 0 0 NA 0 0 0 0 0 NA NA NA NA NA NA 0 0 NA NA NA 0 0 NA 0 NA 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 NA 0 0 NA 0 0 0 0 0 NA 0 0 0 NA 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Age18_24 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 NA 0 0 NA NA NA 0 0 NA NA NA 0 0 NA 0 0 0 0 0 NA 0 0 NA 0 0 0 0 NA NA 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 NA 0 0 NA NA NA 0 NA NA NA NA NA 0 NA 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 NA 0 0 NA NA NA 0 0 NA NA 0 0 0 NA 0 0 0 0 0 NA 0 0 NA 0 0 NA 0 NA NA 0 0 NA 0 0 0 0 0 0 NA 0 0 NA NA NA 0 0 NA NA 0 0 0 NA 0 0 0 NA NA 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 NA 0 NA 0 0 NA 0 0 0 0 NA NA 0 0 0 NA 0 0 0 NA 0 NA NA 0 NA NA 0 0 0 NA NA 0 0 0 0 0 0 NA 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 97800 0 0 NA NA NA 0 0 NA NA 0 0 0 NA 0 0 0 0 0 NA 0 0 NA NA NA 0 0 NA NA NA NA 0 NA NA 0 0 0 0 0 0 0 763 1020 0 0 0 0 680 2505 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 NA 0 0 NA 0 0 0 0 NA NA 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 NA 0 0 NA NA NA 0 0 NA NA NA NA 0 0 0 0 0 0 0 NA 0 0 NA 0 0 0 0 NA NA 0 0 0 NA 0 0 0 0 0 NA NA NA NA NA NA 0 0 NA NA NA NA 0 NA NA NA 0 0 0 NA 0 0 NA 0 0 0 0 NA NA 0 0 0 0 0 0 0 0 0 NA 0 0 NA 0 0 0 0 0 NA 0 0 0 NA 0 0 0 0 0 NA 0 0 NA 0 0 NA 0 NA NA 0 0 NA NA 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Age25_49 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 NA 0 0 NA NA NA 0 0 NA NA NA 0 0 NA 0 0 0 0 0 NA 0 0 NA 0 0 0 0 NA NA 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 NA 0 0 NA NA NA 0 NA NA NA NA NA 0 NA 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 NA 0 0 NA NA NA 0 0 NA NA 0 0 0 NA 0 0 0 0 0 NA 0 0 NA 0 0 NA 0 NA NA 0 0 NA 0 0 0 0 0 0 NA 0 0 NA NA NA 0 0 NA NA 0 0 0 NA 0 0 0 NA NA 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 NA 0 NA 0 0 NA 0 0 0 0 NA NA 0 0 0 NA 0 0 0 NA 0 NA NA 0 NA NA 0 0 0 NA NA 0 0 0 0 0 0 NA 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 97800 0 0 NA NA NA 0 0 NA NA 0 0 0 NA 0 0 0 0 0 NA 0 0 NA NA NA 0 0 NA NA NA NA 0 NA NA 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 NA 0 0 NA 0 0 0 0 NA NA 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 NA 0 0 NA NA NA 0 0 NA NA NA NA 0 0 0 0 0 0 0 NA 0 0 NA 0 0 0 0 NA NA 0 0 0 NA 0 0 0 0 0 NA NA NA NA NA NA 0 0 NA NA NA NA 0 NA NA NA 0 0 0 NA 0 0 NA 0 0 0 0 NA NA 0 0 0 0 0 0 0 0 0 NA 0 0 NA 0 0 0 0 0 NA 0 0 0 NA 0 0 0 0 0 NA 0 0 NA 0 0 NA 0 NA NA 0 0 NA NA 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Age5_9 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 NA NA NA 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 NA 0 0 NA NA NA 0 0 NA NA 0 0 0 NA 0 0 0 0 0 NA 0 0 NA 0 0 NA 0 NA NA 0 0 NA 0 0 0 0 0 0 NA 0 0 NA NA NA 0 0 NA NA 0 0 0 NA 0 0 0 NA NA 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 NA 0 0 NA 0 0 0 0 NA NA 0 0 0 NA 0 0 0 NA 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 97800 0 0 NA NA NA 0 0 NA NA 0 0 0 NA 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 NA 0 0 NA 0 0 0 0 NA NA 0 0 0 NA 0 0 0 0 0 NA NA NA NA NA NA 0 0 NA NA 0 0 0 NA NA NA 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Age50_59 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 NA 0 0 NA NA NA 0 0 NA NA NA 0 0 NA 0 0 0 0 0 NA 0 0 NA 0 0 0 0 NA NA 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 NA 0 0 NA NA NA 0 NA NA NA NA NA 0 NA 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 NA 0 0 NA NA NA 0 0 NA NA 0 0 0 NA 0 0 0 0 0 NA 0 0 NA 0 0 NA 0 NA NA 0 0 NA 0 0 0 0 0 0 NA 0 0 NA NA NA 0 0 NA NA 0 0 0 NA 0 0 0 NA NA 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 NA 0 NA 0 0 NA 0 0 0 0 NA NA 0 0 0 NA 0 0 0 NA 0 NA NA 0 NA NA 0 0 0 NA NA 0 0 0 0 0 0 NA 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 97800 0 0 NA NA NA 0 0 NA NA 0 0 0 NA 0 0 0 0 0 NA 0 0 NA NA NA 0 0 NA NA NA NA 0 NA NA 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 NA 0 0 NA 0 0 0 0 NA NA 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 NA 0 0 NA NA NA 0 0 NA NA NA NA 0 0 0 0 0 0 0 NA 0 0 NA 0 0 0 0 NA NA 0 0 0 NA 0 0 0 0 0 NA NA 0 NA NA NA 0 0 NA NA NA NA 0 NA NA NA 0 0 0 NA 0 0 NA 0 0 0 0 NA NA 0 0 0 0 0 0 0 0 0 NA 0 0 NA 0 0 0 0 0 NA 0 0 0 NA 0 0 0 0 0 NA 0 0 NA 0 0 NA 0 NA NA 0 0 NA NA NA 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Age60_69 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 NA 0 0 NA NA NA 0 0 NA NA NA 0 0 NA 0 0 0 0 0 NA 0 0 NA 0 0 0 0 NA NA 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 NA 0 0 NA NA NA 0 NA NA NA NA NA 0 NA 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 NA 0 0 NA NA NA 0 0 NA NA 0 0 0 NA 0 0 0 0 0 NA 0 0 NA 0 0 NA 0 NA NA 0 0 NA 0 0 0 0 0 0 NA 0 0 NA NA NA 0 0 NA NA 0 0 0 NA 0 0 0 NA NA 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 NA 0 NA 0 0 NA 0 0 0 0 NA NA 0 0 0 NA 0 0 0 NA 0 NA NA 0 NA NA 0 0 0 NA NA 0 0 0 0 0 0 NA 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 97800 0 0 NA NA NA 0 0 NA NA 0 0 0 NA 0 0 0 0 0 NA 0 0 NA NA NA 0 0 NA NA NA NA 0 NA NA 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 NA 0 0 NA 0 0 0 0 NA NA 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 NA 0 0 NA NA NA 0 0 NA NA NA NA 0 0 0 0 0 0 0 NA 0 0 NA 0 0 0 0 NA NA 0 0 0 NA 0 0 0 0 0 NA NA NA NA NA NA 0 0 NA NA NA NA 0 NA NA NA 0 0 0 NA 0 0 NA 0 0 0 0 NA NA 0 0 0 0 0 0 0 0 0 NA 0 0 NA 0 0 0 0 0 NA 0 0 0 NA 0 0 0 0 0 NA 0 0 NA 0 0 NA 0 NA NA 0 0 NA NA 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Age70_79 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 NA 0 0 NA NA NA 0 0 NA NA NA 0 0 NA 0 0 0 0 0 NA 0 0 NA 0 0 0 0 NA NA 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 NA 0 0 NA NA NA 0 NA NA NA NA NA 0 NA 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 NA 0 0 NA NA NA 0 0 NA NA 0 0 0 NA 0 0 0 0 0 NA 0 0 NA 0 0 NA 0 NA NA 0 0 NA 0 0 0 0 0 0 NA 0 0 NA NA NA 0 0 NA NA 0 0 0 NA 0 0 0 NA NA 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 NA 0 NA 0 0 NA 0 0 0 0 NA NA 0 0 0 NA 0 0 0 NA 0 NA NA 0 NA NA 0 0 0 NA NA 0 0 0 0 0 0 NA 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 97800 0 0 NA NA NA 0 0 NA NA 0 0 0 NA 0 0 0 0 0 NA 0 0 NA NA NA 0 0 NA NA NA NA 0 NA NA 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 NA 0 0 NA 0 0 0 0 NA NA 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 NA 0 0 NA NA NA 0 0 NA NA NA NA 0 0 0 0 0 0 0 NA 0 0 NA 0 0 0 0 NA NA 0 0 0 NA 0 0 0 0 0 NA NA NA NA NA NA 0 0 NA NA NA NA 0 NA NA NA 0 0 0 NA 0 0 NA 0 0 0 0 NA NA 0 0 0 0 0 0 0 0 0 NA 0 0 NA 0 0 0 0 0 NA 0 0 0 NA 0 0 0 0 0 NA 0 0 NA 0 0 NA 0 NA NA 0 0 NA NA 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Age80+ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 NA 0 0 NA NA NA 0 0 NA NA NA 0 0 NA 0 0 0 0 0 NA 0 0 NA 0 0 0 0 NA NA 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 NA 0 0 NA NA NA 0 NA NA NA NA NA 0 NA 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 NA 0 0 NA NA NA 0 0 NA NA 0 0 0 NA 0 0 0 0 0 NA 0 0 NA 0 0 NA 0 NA NA 0 0 NA 0 0 0 0 0 0 NA 0 0 NA NA NA 0 0 NA NA 0 0 0 NA 0 0 0 NA NA 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 NA 0 NA 0 0 NA 0 0 0 0 NA NA 0 0 0 NA 0 0 0 NA 0 NA NA 0 NA NA 0 0 0 NA NA 0 0 0 0 0 0 NA 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 97800 0 0 NA NA NA 0 0 NA NA 0 0 0 NA 0 0 0 0 0 NA 0 0 NA NA NA 0 0 NA NA NA NA 0 NA NA 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 NA 0 0 NA 0 0 0 0 NA NA 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 NA 0 0 NA NA NA 0 0 NA NA NA NA 0 0 0 0 0 0 0 NA 0 0 NA 0 0 0 0 NA NA 0 0 0 NA 0 0 0 0 0 NA NA NA NA NA NA 0 0 NA NA NA 0 0 NA NA NA 0 0 0 NA 0 0 NA 0 0 0 0 NA NA 0 0 0 0 0 0 0 0 0 NA 0 0 NA 0 0 0 0 0 NA 0 0 0 NA 0 0 0 0 0 NA 0 0 NA 0 0 NA 0 NA NA 0 0 NA NA 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
AgeUNK 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 NA 0 0 NA NA NA 0 0 NA NA NA 0 0 NA 0 0 0 0 0 NA 0 0 NA 0 0 0 0 NA NA 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 NA 0 0 NA NA NA 0 0 NA NA 0 0 0 NA 0 0 0 0 0 NA 0 0 NA 0 0 NA 0 NA NA 0 0 NA 0 0 0 0 0 0 NA 0 0 NA NA NA 0 0 NA NA 0 0 0 NA 0 0 0 NA NA 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 NA 0 NA 0 0 NA 0 0 0 0 NA NA 0 0 0 NA 0 0 0 NA 0 NA NA 0 NA NA 0 0 0 NA NA 0 0 0 0 0 0 NA 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 97800 0 0 NA NA NA 0 0 NA NA 0 0 0 NA 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 NA 0 0 NA 0 0 0 0 NA NA 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 NA 0 0 NA 0 0 0 0 NA NA 0 0 0 NA 0 0 0 0 0 NA NA NA NA NA NA 0 0 NA NA NA 0 0 0 0 NA 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
ALL 5519600 0 0 24394773 1512000 5530560 0 0 1292400 5963500 2474610 0 0 3192000 2243300 0 0 0 151200 NA 0 0 NA NA NA 0 0 NA NA NA 0 0 NA 0 0 0 0 0 NA 0 0 7265580 0 0 0 0 NA NA 0 0 0 0 0 0 0 0 0 432300 0 0 2033293 0 37440 0 0 190100 155200 24250 9500 0 90000 0 0 0 0 0 1628400 0 0 21204560 1321920 5135040 0 97920 1396200 3685100 199700 46750 0 578000 64800 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 241419933 0 202920 0 0 7614360 0 0 0 0 42300 1350690 0 0 0 0 0 0 0 0 0 818300 0 0 2304060 279360 350400 0 0 120800 270400 192750 98400 0 60800 0 0 0 0 0 4035800 0 0 25348740 800640 1428480 0 0 2401800 1770000 0 0 0 396000 0 0 0 0 0 NA 0 0 100959011 0 0 NA 0 NA NA 0 0 NA 0 0 0 0 0 0 NA 0 0 NA NA NA 0 0 NA NA 0 0 0 NA 0 0 0 NA NA 10355500 0 0 136804000 0 23481600 0 0 3732300 54929280 8321200 3315650 0 2965000 16576400 0 0 NA 0 NA 0 0 NA 0 0 0 0 NA NA 0 0 0 NA 0 0 0 NA 0 6513800 5187056 0 13163840 216000 0 0 0 4309200 1736400 0 0 0 0 0 0 2000000 0 0 1442700 0 0 11135050 0 0 0 0 281500 3290500 0 0 0 198000 0 0 0 0 0 100880 0 0 794870 126720 100800 0 0 57500 261720 65350 98350 0 42000 0 0 0 0 0 NA 0 0 NA NA NA 0 0 NA NA NA NA 0 NA NA 0 0 0 0 0 0 0 22650 0 0 0 0 650 44500 0 0 0 0 0 0 0 0 0 1121594 0 0 6789378 0 0 0 0 653097 732830 0 0 0 0 0 0 0 10162 0 186600 0 0 1346640 86400 168000 0 18240 80250 302610 303240 243300 0 105000 0 0 0 0 0 1273400 0 0 3001755 460800 1088640 0 0 1259800 1171300 543980 123600 0 189600 108000 0 0 0 0 NA 0 0 NA 0 0 0 0 NA NA 0 0 0 0 0 0 0 0 0 4503400 0 0 34003726 2871360 6325440 0 0 2464800 11327200 6175700 0 0 707000 0 0 0 0 0 578400 0 0 11373105 889920 2453760 0 0 403900 3982600 1443150 2271400 0 0 0 0 0 0 0 NA 0 0 NA 0 0 0 0 NA NA 0 0 0 NA 0 0 0 0 0 NA NA NA NA NA NA 0 0 NA NA NA NA 0 NA NA NA 0 0 0 2999600 0 0 18276235 0 0 0 0 2820300 2805700 0 0 0 0 0 0 0 0 0 NA 0 0 NA 0 0 0 0 0 NA 0 0 0 NA 0 0 0 0 0 1123800 0 0 3987390 0 0 800640 58560 230400 714400 0 0 705400 94000 115200 0 0 0 0 1612810 0 0 7723560 0 0 0 0 475200 871200 0 0 0 93000 0 0 200000 0 0
HCW 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 NA 0 0 NA NA NA 0 0 NA NA NA 0 0 NA 0 0 0 0 0 NA 0 0 NA 0 0 0 0 NA NA 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 NA 0 0 NA NA NA 0 NA NA NA NA NA 0 NA 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 NA 0 0 NA NA NA 0 0 NA NA 0 0 0 NA 0 0 0 0 0 NA 0 0 NA 0 0 NA 0 NA NA 0 0 NA 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 NA 0 0 NA 0 0 0 0 NA NA 0 0 0 NA 0 0 0 NA 0 NA NA 0 NA 0 0 0 0 NA NA 0 0 0 0 0 0 NA 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 97800 0 0 NA NA NA 0 0 NA NA 0 0 0 NA 0 0 0 0 0 NA 0 0 NA NA NA 0 0 NA NA NA NA 0 NA NA 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 NA 0 0 NA 0 0 0 0 NA NA 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 NA 0 0 NA NA NA 0 0 NA NA NA NA 0 0 0 0 0 0 0 NA 0 0 NA 0 0 0 0 NA NA 0 0 0 NA 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 NA 0 0 NA 0 0 0 0 NA NA 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 NA 0 NA 0 0 NA 0 0 NA 0 NA NA 0 0 NA 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
LTCF 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 NA 0 0 NA NA NA 0 0 NA NA NA 0 0 NA 0 0 0 0 0 NA 0 0 NA 0 0 0 0 NA NA 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 NA 0 0 NA NA NA 0 NA NA NA NA 0 0 NA 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 NA 0 NA 0 0 NA 0 0 0 0 0 0 0 0 0 0 NA 0 0 NA 0 0 NA 0 NA NA 0 0 NA 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 NA 0 0 NA 0 0 0 0 NA NA 0 0 0 NA 0 0 0 NA 0 NA NA 0 NA 0 0 0 0 NA NA 0 0 0 0 0 0 NA 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 97800 0 0 NA NA NA 0 0 NA NA 0 0 0 NA 0 0 0 0 0 NA 0 0 NA NA NA 0 0 NA NA NA NA 0 NA NA 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 NA 0 0 NA 0 0 0 0 NA NA 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 NA 0 0 NA 0 0 0 0 NA NA 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 NA 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
NA
NA
NA
NA
NA
--- Cropped output ---
Sometimes, it is better to use a shorter table as an example… Let’s go back to the coli_genomes data that you already know.
Could you obtain a table like the following, with the number of Contigs by isolation source (Source) and phylogenetic group (Phylogroup)? Phylogroup
Source A B1 C D
Avian 134 102 108 0
Human 790 208 662 1010
Porcine 958 0 0 0
Now, let’s do it a little bit more complicated. If we split the previous table by the STs (aka. multilocus sequence typing), you obtain a very large table:
, , Sequence.Type = ST10
Phylogroup
Source A B1 C D
Avian 0 0 0 0
Human 120 0 0 0
Porcine 277 0 0 0
, , Sequence.Type = ST1049
Phylogroup
Source A B1 C D
Avian 0 0 0 0
Human 0 94 0 0
Porcine 0 0 0 0
, , Sequence.Type = ST10888
Phylogroup
Source A B1 C D
Avian 0 0 0 0
Human 0 0 0 0
Porcine 203 0 0 0
, , Sequence.Type = ST10890
Phylogroup
Source A B1 C D
Avian 0 0 0 0
Human 0 0 171 0
Porcine 0 0 0 0
, , Sequence.Type = ST137
Phylogroup
Source A B1 C D
Avian 0 0 0 0
Human 0 0 0 205
Porcine 0 0 0 0
, , Sequence.Type = ST156
Phylogroup
Source A B1 C D
Avian 0 0 0 0
Human 0 114 0 0
Porcine 0 0 0 0
, , Sequence.Type = ST3011
--- Cropped output ---
This is quite a long cross-table that we have cropped on the output, maybe you could find more convenient transforming it to a flat contingency table with ftable().
If you test the different options, you will notice that the format of the table can be defined by the order of the variables and also using the arguments row.vars and col.vars to define which variables will be summarized as column or row.
Again, rather than concepts from R or RStudio, cross-tabulation and flat contingency tables are general concepts in data analysis.
While frequency tables can be very quickly generated with table() and xtabs(), sometimes you may want other calculations than frequency, like basic statistics per group or other, even custom, calculations.
You have already tried the function by() as a very useful trick to make group-calculations. However, this function has some limitations when we have large datasets and when we try to use multiple factors that can be solved with aggregate(). In both cases, the function can be any function that suits your data, either from R packages or a custom function.
In the following example, we are using a smaller dataset named vaccines2 that we can obtain by sampling (random extraction of a portion of data) with the R function sample().
vaccines2$Region: AT
[1] 2551.369
------------------------------------------------------------
vaccines2$Region: BE
[1] 99462.35
------------------------------------------------------------
vaccines2$Region: BG
[1] 27381.89
------------------------------------------------------------
vaccines2$Region: CY
[1] 426.2916
------------------------------------------------------------
vaccines2$Region: CZ
[1] 45384.71
------------------------------------------------------------
vaccines2$Region: DE
[1] 1693023
------------------------------------------------------------
vaccines2$Region: DK
[1] 479.8983
------------------------------------------------------------
vaccines2$Region: EE
[1] 387.9051
------------------------------------------------------------
vaccines2$Region: EL
--- Cropped output ---
In the example above, we could calculate the mean by groups. Can we do it with more than one grouping factor? Let’s try some alternatives and see the output
Error in `vaccines2$Region + vaccines2$Vaccine`:
! argumento no-numérico para operador binario
Error in `tapply()`:
! los argumentos deben tener la misma longitud
: AT
: AZ
[1] 6096
------------------------------------------------------------
: BE
: AZ
[1] 0
------------------------------------------------------------
: BG
: AZ
[1] 13500
------------------------------------------------------------
: CY
: AZ
[1] 1075.862
------------------------------------------------------------
: CZ
: AZ
[1] 7800
------------------------------------------------------------
: DE
: AZ
[1] NA
------------------------------------------------------------
: DK
--- Cropped output ---
When by() becomes difficult to read, aggregate() is usually the best quick alternative
vaccines2$Region vaccines2$NumberDosesReceived
1 AT 2.551369e+03
2 BE 9.946235e+04
3 BG 2.738189e+04
4 CY 4.262916e+02
5 CZ 4.538471e+04
6 DE 1.693023e+06
7 DK 4.798983e+02
8 EE 3.879051e+02
9 EL 2.647869e+04
10 ES 7.898175e+05
11 FI 1.157760e+05
12 FR 2.224672e+05
13 HR 6.273000e+04
14 HU 3.995886e+04
--- Cropped output ---
Region Vaccine NumberDosesReceived
1 AT AZ 6.096000e+03
2 BE AZ 0.000000e+00
3 BG AZ 1.350000e+04
4 CY AZ 1.075862e+03
5 CZ AZ 7.800000e+03
6 DK AZ 0.000000e+00
7 EE AZ 0.000000e+00
8 EL AZ 0.000000e+00
9 ES AZ 1.076800e+05
10 FI AZ 4.320000e+04
11 FR AZ 0.000000e+00
12 HR AZ 3.480000e+04
13 HU AZ 4.698333e+04
14 IE AZ 2.000000e+02
--- Cropped output ---
TargetGroup FirstDoseRefused
1 1_Age<60 0
2 1_Age60+ 0
3 Age<18 0
4 Age18_24 0
5 Age25_49 0
6 Age50_59 0
7 Age60_69 0
8 Age70_79 0
9 Age80+ 0
10 AgeUNK 0
11 ALL 0
12 HCW 0
13 LTCF 0
NA
--- Cropped output ---
TargetGroup FirstDoseRefused
1 1_Age<60 NA
2 1_Age60+ NA
3 Age<18 NA
4 Age0_4 NA
5 Age10_14 NA
6 Age15_17 NA
7 Age18_24 NA
8 Age25_49 NA
9 Age5_9 NA
10 Age50_59 NA
11 Age60_69 NA
12 Age70_79 NA
13 Age80+ NA
14 AgeUNK NA
--- Cropped output ---
as.factor(TargetGroup) NumberDosesReceived FirstDose SecondDose
1 Age<18 0.00000 269.009901 270.125413
2 Age0_4 0.00000 3.378505 1.672897
3 Age10_14 100.35912 185.715470 171.745856
4 Age15_17 143.47826 60.316425 54.664251
5 Age18_24 65.65984 314.684426 132.907787
6 Age25_49 173.43808 1183.016636 2131.767098
7 Age5_9 208.15249 96.495601 57.340176
8 Age50_59 61.99219 1375.244141 254.242188
9 Age60_69 90.73308 414.659774 483.998120
10 Age70_79 201.56190 188.198095 583.529524
11 Age80+ 62.00780 471.941520 319.929825
12 AgeUNK 475.75472 3.226415 2.245283
13 ALL 81792.19289 17110.762481 13626.616490
14 HCW 234.13636 295.850000 130.027273
--- Cropped output ---
We can also add a custom function, using the short, usually with the inline notation:
as.factor(TargetGroup) FirstDose SecondDose
1 1_Age<60 47.324908400 34.931785647
2 1_Age60+ 54.860811094 37.799557222
3 Age<18 3.485008580 3.541010202
4 Age0_4 0.002366089 0.001725069
5 Age10_14 0.576176099 0.677220544
6 Age15_17 0.414532331 0.526773378
7 Age18_24 3.712587593 2.077606876
8 Age25_49 10.314799681 12.744883398
9 Age5_9 0.813085856 0.300709703
10 Age50_59 8.042666855 5.051585855
11 Age60_69 5.296857730 4.636943249
12 Age70_79 3.106775193 3.825424779
13 Age80+ 2.596361971 2.586878242
14 AgeUNK 0.098153187 0.010448088
15 ALL 35.130635564 28.947058543
16 HCW 1.197323887 1.505451675
17 LTCF 0.447467140 1.194017075
We are using again the coli_genomes dataframe.
Can you obtain the following table displaying the mean (%) of virulece factors (VF) and plasmids per genome nucleotide (Assembly_length) grouped by Source Source VF Plasmids
1 Avian 1.455256e-04 5.291842e-05
2 Human 2.235803e-04 5.291842e-05
3 Porcine 8.929983e-05 1.289886e-04
The apply family of functions applies the same function repeatedly to elements of a data structure. It includes various functions, designed for matrices, dataframes or lists. What is special about these functions is that their arguments are not only data but also functions. Using an apply function can seem complicated at first, but it is very useful for avoiding repetitive code. In this section, we look at the apply() function and its variants, including lapply(), sapply(), tapply(), rapply() & mapply(). In general, Apply is a very efficient tool to perform repetitive calculations.
Rather than describing in detail all the functions, in the following examples we test some of the possibilities of some applies. Try yourself and check the code comments.
apply() is useful for rows or columns of a matrix-like object.lapply() applies a function and returns a list.sapply() is similar to lapply(), but tries to simplify the result.tapply() applies a function to a vector split by groups.vapply() is like sapply(), but requires the expected output type.mapply() is useful when the function needs several input vectors.rapply() is useful for recursive operations on nested lists. [1] 0.000000e+00 0.000000e+00 3.000000e+00 0.000000e+00 5.000000e-01
[6] 6.250000e-01 6.250000e-01 5.000000e-01 0.000000e+00 6.250000e-01
[11] 1.250000e-01 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00
[16] 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00
[21] 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00
[26] 0.000000e+00 8.887500e+01 3.750000e+00 1.325000e+01 1.862500e+01
--- Cropped output ---
NumberDosesReceived NumberDosesExported FirstDose FirstDoseRefused
1.400034e+04 8.621084e+02 1.147629e+03 4.015204e-01
SecondDose DoseAdditional1 DoseAdditional2 DoseAdditional3
1.044477e+03 8.282688e+02 2.215100e+02 3.164597e+01
DoseAdditional4
4.815256e-01
--- Cropped output ---
YearWeekISO ReportingCountry Denominator NumberDosesReceived
FALSE FALSE FALSE FALSE
NumberDosesExported FirstDose FirstDoseRefused SecondDose
FALSE FALSE FALSE FALSE
DoseAdditional1 DoseAdditional2 DoseAdditional3 DoseAdditional4
FALSE FALSE FALSE FALSE
DoseAdditional5 UnknownDose Region TargetGroup
FALSE FALSE FALSE FALSE
Vaccine Population
FALSE FALSE
Denominator NumberDosesReceived NumberDosesExported FirstDose
TRUE TRUE TRUE TRUE
Note that you can use any function, although apply()is best suited for numeric calculations as it coerces your data to an array (via as.matrix()). Thus, when a dataframe cannot be transformed in a matrix your function may return fail. In the example above is.numeric() returns false for all columns within the apply when the dataframe contains character data, but if we use a subset that only contains numeric data the result makes sense. As you can see below, sapply() and lapply() are best suited for this kind of functions.
$AT
[1] 6.952307
$BE
[1] 7.064378
$BG
[1] 6.836669
$CY
[1] 5.955408
$CZ
[1] 7.021618
$DE
[1] 7.920154
$DK
[1] 6.767897
$EE
[1] 6.124304
$EL
--- Cropped output ---
AT BE BG CY CZ DE DK EE
6.952307 7.064378 6.836669 5.955408 7.021618 7.920154 6.767897 6.124304
EL ES FI FR HR HU IE IS
7.022918 7.675960 6.743725 7.831098 6.594992 6.987135 6.702566 5.571271
IT LI LT LU LV MT NL NO
7.771600 4.593620 6.447600 5.808232 6.274627 5.715350 7.244198 6.733418
PL PT RO SE SI SK
7.576630 7.014051 7.280790 7.018045 6.323863 6.736098
[1] "list"
[1] "numeric"
[1] 5548241 0 0 NA
YearWeekISO ReportingCountry Denominator NumberDosesReceived
"character" "character" "integer" "integer"
NumberDosesExported FirstDose FirstDoseRefused SecondDose
"integer" "integer" "integer" "integer"
DoseAdditional1 DoseAdditional2 DoseAdditional3 DoseAdditional4
"integer" "integer" "integer" "integer"
DoseAdditional5 UnknownDose Region TargetGroup
"integer" "integer" "character" "character"
Vaccine Population
"character" "integer"
YearWeekISO ReportingCountry Denominator NumberDosesReceived
FALSE FALSE TRUE TRUE
NumberDosesExported FirstDose FirstDoseRefused SecondDose
TRUE TRUE TRUE TRUE
DoseAdditional1 DoseAdditional2 DoseAdditional3 DoseAdditional4
TRUE TRUE TRUE TRUE
DoseAdditional5 UnknownDose Region TargetGroup
TRUE TRUE FALSE FALSE
Vaccine Population
FALSE TRUE
Warning in (function (pattern, replacement, x, ignore.case = FALSE, perl =
FALSE, : el argumento 'pattern' tiene longitud > 1 y sólo el primer elemento
será usado
Warning in (function (pattern, replacement, x, ignore.case = FALSE, perl =
FALSE, : el argumento 'replacement' tiene longitud > 1 y sólo el primer
elemento será usado
NumberDosesReceived
[1,] NA
[2,] NA
[3,] NA
[4,] NA
[5,] NA
[6,] NA
[7,] NA
[8,] NA
[9,] NA
--- Cropped output ---
$a
[1] "a" "a" "a" "a"
$b
[1] "b" "b" "b"
$c
[1] "c" "c"
$d
[1] "d"
AT BE BG CY CZ DE DK EE EL ES FI
0 0 0 0 0 842400 0 0 0 0 91875
FR HR HU IE IS IT LI LT LU LV MT
0 34800 0 0 0 0 0 0 0 0 NA
NL NO PL PT RO SE SI SK
0 0 0 0 0 0 0 0
Avian Human Porcine
7.333333 11.266667 4.500000
SecondDose DoseAdditional1 DoseAdditional2 DoseAdditional3
1044.47747 828.26878 221.51000 31.64597
SecondDose DoseAdditional1 DoseAdditional2 DoseAdditional3
[1,] 0.000000e+00 0.000000e+00 0.000000e+00 0
[2,] 0.000000e+00 0.000000e+00 0.000000e+00 0
[3,] 0.000000e+00 1.000000e+00 8.100000e+01 169
[4,] 0.000000e+00 0.000000e+00 0.000000e+00 0
[5,] 0.000000e+00 0.000000e+00 1.000000e+00 9
[6,] 0.000000e+00 0.000000e+00 1.000000e+00 16
[7,] 0.000000e+00 0.000000e+00 9.000000e+00 4
[8,] 0.000000e+00 0.000000e+00 1.000000e+00 9
[9,] 0.000000e+00 0.000000e+00 0.000000e+00 0
--- Cropped output ---
Denominator NumberDosesReceived NumberDosesExported FirstDose
NA NA NA 1.147629e+03
FirstDoseRefused SecondDose DoseAdditional1 DoseAdditional2
NA 1.044477e+03 8.282688e+02 2.215100e+02
DoseAdditional3 DoseAdditional4 DoseAdditional5 UnknownDose
3.164597e+01 4.815256e-01 4.917829e-06 9.610626e+00
Population
1.584276e+07
NULL
vaccines$ReportingCountry<-as.factor(vaccines$ReportingCountry)
vaccines$Vaccine<-as.factor(vaccines$Vaccine)
vaccines$TargetGroup<-as.factor(vaccines$TargetGroup)
vaccines$Region<-as.factor(vaccines$Region)
rapply(vaccines, table, class="factor") #factors need to be defined and now it gives the counts for each group of each factor ReportingCountry.AT ReportingCountry.BE ReportingCountry.BG
17292 7330 6001
ReportingCountry.CY ReportingCountry.CZ ReportingCountry.DE
7098 6593 564
ReportingCountry.DK ReportingCountry.EE ReportingCountry.EL
4821 7755 16413
ReportingCountry.ES ReportingCountry.FI ReportingCountry.FR
12960 407160 22743
ReportingCountry.HR ReportingCountry.HU ReportingCountry.IE
9270 6712 6367
--- Cropped output ---
$YearWeekISO
NULL
$ReportingCountry
NULL
$Denominator
[1] 272851
$NumberDosesReceived
--- Cropped output ---
Denominator NumberDosesReceived NumberDosesExported FirstDose
272851 0 0 0
FirstDoseRefused SecondDose DoseAdditional1 DoseAdditional2
0 0 0 0
DoseAdditional3 DoseAdditional4 DoseAdditional5 UnknownDose
0 0 0 0
Population
5548241
List of 4
$ : chr "a"
$ :List of 2
..$ : num 24
..$ : num 443
$ : num 434
$ :List of 2
..$ : num 54
..$ :List of 2
.. ..$ : num 6443
.. ..$ : num 7234
[1] 4.584963 8.791163 8.761551 5.754888 12.653517 12.820578
[1] 4.584963 8.791163 8.761551 5.754888 12.653517 12.820578
num [1:6] 4.58 8.79 8.76 5.75 12.65 ...
Note that tapply() and by() are very similar. Indeed, by() is a wrapper of tapply(). On the other hand, vapply() is similar to sapply, but has a pre-specified type of return value, so it can be safer (or faster) to use sometimes. Finally, rapply() is not very often used, but it can be the best option for complex datasets, like those including nested lists or complex lists with several dataframes and/or vectors.
The applications of apply functions are very wide, particularly the apply() and lapply(). You can use them to parse data with many different input and output structures and almost any kind of R functions, including plots (see Lesson R8).
Of course, based on the coli_genomes dataframe.
How would you obtain the logarithm of the mean of all the columns?Yes, a function must be suitable for the selected data and the dataframe coli_genomes contains numeric and categorical variables, but the function log10(mean) only can work with numeric data. Let’s do it in two steps:
How would you select only numeric columns?A useful workflow for R6 tasks is:
str(), head() and dim().dim(), str() and all.equal() when appropriate.Manipulación de datos en R: https://r-coder.com/manipulacion-datos-r/ [ES] & https://r-coder.com/r-data-manipulation/ [EN]
R in action. Robert I. Kabacoff. March 2022 ISBN 9781617296055
Working with tables in R: https://bookdown.org/kdonovan125/ibis_data_analysis_r4/working-with-tables-in-r.html
About flat tables in R: https://cran.r-project.org/web/packages/memisc/vignettes/ftable-matrix.html
data.table cheatsheet: https://raw.githubusercontent.com/rstudio/cheatsheets/main/datatable.pdf
Data aggregation: https://r-coder.com/aggregate-r/
About Applies: https://www.r-bloggers.com/2016/03/apply-lapply-rapply-sapply-functions-in-r-2/ & https://gist.github.com/lyndametref/4d137fcba1ec4d9af80ad53245b358ff
Efficient data management in R: https://www.mzes.uni-mannheim.de/socialsciencedatalab/article/efficient-data-r/
We are using the COVID-19 testing data for these exercises. You can download the updated csv file from https://opendata.ecdc.europa.eu/covid19/testing/csv/data.csv (see also https://www.ecdc.europa.eu/en/publications-data/covid-19-testing). Read and explore the data. I also suggest to save the table in your computer as covid_tests.csv.
Hint. For the second table, use the function ISOweek2date() from the package “ISOweek” to transform the ISO date_week to standard date format.
subset() and sapply() here.tapply() to obtain the mean, median and min of new_cases per country and construct a dataframe with the result.Hint. Consider how to handle NA’s.
The topics in this lesson can be dense and bewildering the first time. I selected some sheets of exercises from great websites that can give you an extra practice.
R version 4.6.0 (2026-04-24 ucrt)
Platform: x86_64-w64-mingw32/x64
Running under: Windows 11 x64 (build 26200)
Matrix products: default
LAPACK version 3.12.1
locale:
[1] LC_COLLATE=Spanish_Spain.utf8 LC_CTYPE=Spanish_Spain.utf8
[3] LC_MONETARY=Spanish_Spain.utf8 LC_NUMERIC=C
[5] LC_TIME=Spanish_Spain.utf8
time zone: Europe/Madrid
tzcode source: internal
attached base packages:
[1] stats graphics grDevices utils datasets methods base
other attached packages:
[1] data.table_1.18.4 webexercises_1.1.0 formatR_1.14 knitr_1.51
loaded via a namespace (and not attached):
[1] digest_0.6.39 fastmap_1.2.0 xfun_0.57 glue_1.8.1
[5] htmltools_0.5.9 rmarkdown_2.31 lifecycle_1.0.5 cli_3.6.6
[9] vctrs_0.7.3 compiler_4.6.0 rstudioapi_0.19.0 tools_4.6.0
[13] pillar_1.11.1 evaluate_1.0.5 yaml_2.3.12 otel_0.2.0
[17] rlang_1.2.0 jsonlite_2.0.0 htmlwidgets_1.6.4
Check proposed answers in the repo: https://github.com/r4biochemists/r4biochemists.github.io/tree/main/answers2exercises↩︎