[R] List of tables rather than an extra dimension in the table or (l)apply(xtabs)
Mulholland, Tom
Tom.Mulholland at dpi.wa.gov.au
Tue Mar 22 06:34:34 CET 2005
I'm not sure how to best explain what I am after but here goes. I have a data frame with 2 geographical factors. One is the major region the other is the component regions.
I am trying to process all the regions at the same time without using "for". So I need (think, I do) a list of matrices each structured according to the number of subregions within each region.
So is there a way of using lapply with xtabs or is there a better way to achieve my desired output?
Using the Titanic data as an example
t1 <- as.data.frame(Titanic)
t2 <- split(t1,t1$Class)
# I would then drop any unused levels in the factors for the geography creating distinctly different data.frames (see end of message)
> xtabs(Freq ~ Age + Sex + Class,t1)
, , Class = 1st
Sex
Age Male Female
Child 5 1
Adult 175 144
, , Class = 2nd
Sex
Age Male Female
Child 11 13
Adult 168 93
, , Class = 3rd
Sex
Age Male Female
Child 48 31
Adult 462 165
, , Class = Crew
Sex
Age Male Female
Child 0 0
Adult 862 23
Can I do something with t2 to produce a list which is in effect an Age by Sex crosstab with one item for each value of Class. I would be wanting to drop.unused.levels, so that the last part of the table is just
Sex
Age Male Female
Adult 862 23
or in my case each item in the list has the same number of rows as there are subregions for that region.
List of 9
$ 1:`data.frame': 4009 obs. of 7 variables:
..$ sex : Factor w/ 2 levels "Females","Males": 2 2 2 2 2 2 2 2 2 2 ...
..$ age : Factor w/ 18 levels "0-4","5-9","10-14",..: 1 1 1 1 1 1 1 1 1 1 ...
..$ lga : Factor w/ 23 levels "Carnamah (S)",..: 1 2 3 4 5 6 7 8 9 10 ... # 23 subregions
..$ psn : num [1:4009] 71 336 26 84 30 133 904 385 99 110 ...
..$ year : num [1:4009] 1991 1991 1991 1991 1991 ...
..$ agecomp : Factor w/ 14 levels "0-4","5-9","10-14",..: 1 1 1 1 1 1 1 1 1 1 ...
..$ RegionNum: num [1:4009] 1 1 1 1 1 1 1 1 1 1 ...
$ 2:`data.frame': 720 obs. of 7 variables:
..$ sex : Factor w/ 2 levels "Females","Males": 2 2 2 2 2 2 2 2 2 2 ...
..$ age : Factor w/ 18 levels "0-4","5-9","10-14",..: 1 1 1 1 2 2 2 2 3 3 ...
..$ lga : Factor w/ 4 levels "Broome (S)","De..",..: 1 2 3 4 1 2 3 4 1 2 ... # 4 subregions etc
..$ psn : num [1:720] 495 445 189 377 415 374 189 330 324 319 ...
..$ year : num [1:720] 1991 1991 1991 1991 1991 ...
..$ agecomp : Factor w/ 14 levels "0-4","5-9","10-14",..: 1 1 1 1 2 2 2 2 3 3 ...
..$ RegionNum: num [1:720] 2 2 2 2 2 2 2 2 2 2 ...
So these two items would produce
> round(xtabs(psn ~ lga + agecomp,eas[[1]]),-2)
agecomp
lga 0-4 5-9 10-14 15-19 20-24 25-29 30-34 35-39 40-44 45-49 50-54 55-59 60-64 65plus
Carnamah (S) 500 400 300 200 300 300 500 400 400 300 300 200 100 300
Carnarvon (S) 2800 3000 2600 2100 2400 2700 2800 2600 2400 2200 2000 1600 1300 2800
Chapman Valley (S) 300 400 300 200 200 300 300 300 300 400 400 300 200 300
Coorow (S) 700 700 600 200 300 600 700 600 500 500 400 400 300 500
Cue (S) 200 200 100 100 200 200 300 200 200 200 200 100 100 100
Exmouth (S) 900 1000 800 600 700 1100 1100 1100 1100 800 700 500 400 700
Geraldton (C) 7700 7700 8100 8200 7200 7400 7500 7200 6900 6100 5400 4600 4300 12400
Greenough (S) 4700 5400 5500 4400 3100 3700 4800 5100 5200 4200 3500 2600 1900 3200
Irwin (S) 1000 1100 1000 600 600 900 1000 1200 1000 900 800 900 800 1800
Meekatharra (S) 800 700 600 600 900 1000 900 700 600 500 400 300 200 400
Mingenew (S) 300 300 200 100 200 200 300 300 200 200 200 200 100 200
Morawa (S) 400 500 400 400 200 400 500 400 300 300 300 300 200 500
Mount Magnet (S) 500 400 300 200 400 500 400 400 300 300 200 200 100 200
Mullewa (S) 600 600 800 400 400 500 500 400 300 300 300 300 200 400
Murchison (S) 100 100 100 100 0 100 100 0 0 0 100 0 0 0
Northampton (S) 1300 1300 1200 700 700 900 1200 1300 1200 1200 1000 1000 900 2000
Perenjori (S) 300 300 300 100 200 200 300 300 300 200 200 200 100 300
Sandstone (S) 0 0 0 0 100 100 100 100 100 100 100 100 0 100
Shark Bay (S) 300 300 200 200 200 300 400 400 400 300 300 300 200 600
Three Springs (S) 300 300 300 100 200 300 400 300 300 200 300 200 200 400
Upper Gascoyne (S) 100 200 200 100 100 100 100 100 100 100 100 100 100 100
Wiluna (S) 200 200 200 300 600 700 600 400 300 300 300 200 100 100
Yalgoo (S) 100 100 100 0 200 200 200 100 200 200 100 100 100 100
> round(xtabs(psn ~ lga + agecomp,eas[[2]]),-2)
agecomp
lga 0-4 5-9 10-14 15-19 20-24 25-29 30-34 35-39 40-44 45-49 50-54 55-59 60-64 65plus
Broome (S) 5600 5400 4500 3900 4900 5800 6100 5500 4500 3700 2800 2000 1500 2200
Derby-West Kimberley (S) 4000 3900 3400 3100 3800 4000 3800 3100 2500 1900 1500 1200 900 1800
Halls Creek (S) 2100 2100 1700 1600 1800 1600 1400 1100 1000 900 700 600 400 800
Wyndham-East Kimberley (S) 3500 3300 2800 2300 2900 3500 3500 3000 2600 2100 1800 1300 800 1200
$ 3:`data.frame': 2130 obs. of 7 variables:
..$ sex : Factor w/ 2 levels "Females","Males": 2 2 2 2 2 2 2 2 2 2 ...
..$ age : Factor w/ 18 levels "0-4","5-9","10-14",..: 1 1 1 1 1 1 1 1 1 1 ...
..$ lga : Factor w/ 12 levels "Albany (C)","Br..",..: 1 2 3 4 5 6 7 8 9 10 ...
..$ psn : num [1:2130] 1107 21 63 167 115 ...
..$ year : num [1:2130] 1991 1991 1991 1991 1991 ...
..$ agecomp : Factor w/ 14 levels "0-4","5-9","10-14",..: 1 1 1 1 1 1 1 1 1 1 ...
..$ RegionNum: num [1:2130] 3 3 3 3 3 3 3 3 3 3 ...
$ 4:`data.frame': 5188 obs. of 7 variables:
..$ sex : Factor w/ 2 levels "Females","Males": 2 2 2 2 2 2 2 2 2 2 ...
..$ age : Factor w/ 18 levels "0-4","5-9","10-14",..: 1 1 1 1 1 1 1 1 1 1 ...
..$ lga : Factor w/ 29 levels "Beverley (S)",..: 1 2 3 4 5 6 7 8 9 10 ...
..$ psn : num [1:5188] 55 58 84 90 105 134 57 132 56 70 ...
..$ year : num [1:5188] 1991 1991 1991 1991 1991 ...
..$ agecomp : Factor w/ 14 levels "0-4","5-9","10-14",..: 1 1 1 1 1 1 1 1 1 1 ...
..$ RegionNum: num [1:5188] 4 4 4 4 4 4 4 4 4 4 ...
$ 5:`data.frame': 5400 obs. of 7 variables:
..$ sex : Factor w/ 2 levels "Females","Males": 2 2 2 2 2 2 2 2 2 2 ...
..$ age : Factor w/ 18 levels "0-4","5-9","10-14",..: 1 1 1 1 1 1 1 1 1 1 ...
..$ lga : Factor w/ 30 levels "Armadale (C)",..: 1 2 3 4 5 6 7 8 9 10 ...
..$ psn : num [1:5400] 2163 479 1824 865 749 ...
..$ year : num [1:5400] 1991 1991 1991 1991 1991 ...
..$ agecomp : Factor w/ 14 levels "0-4","5-9","10-14",..: 1 1 1 1 1 1 1 1 1 1 ...
..$ RegionNum: num [1:5400] 5 5 5 5 5 5 5 5 5 5 ...
$ 6:`data.frame': 720 obs. of 7 variables:
..$ sex : Factor w/ 2 levels "Females","Males": 2 2 2 2 2 2 2 2 2 2 ...
..$ age : Factor w/ 18 levels "0-4","5-9","10-14",..: 1 1 1 1 2 2 2 2 3 3 ...
..$ lga : Factor w/ 4 levels "Ashburton (S)",..: 1 2 3 4 1 2 3 4 1 2 ...
..$ psn : num [1:720] 532 624 699 930 433 539 689 846 320 379 ...
..$ year : num [1:720] 1991 1991 1991 1991 1991 ...
..$ agecomp : Factor w/ 14 levels "0-4","5-9","10-14",..: 1 1 1 1 2 2 2 2 3 3 ...
..$ RegionNum: num [1:720] 6 6 6 6 6 6 6 6 6 6 ...
$ 7:`data.frame': 1601 obs. of 7 variables:
..$ sex : Factor w/ 2 levels "Females","Males": 2 2 2 2 2 2 2 2 2 2 ...
..$ age : Factor w/ 18 levels "0-4","5-9","10-14",..: 1 1 1 1 1 1 1 1 1 2 ...
..$ lga : Factor w/ 9 levels "Coolgardie ..",..: 1 2 3 4 5 6 7 8 9 1 ...
..$ psn : num [1:1601] 342 105 534 1352 85 ...
..$ year : num [1:1601] 1991 1991 1991 1991 1991 ...
..$ agecomp : Factor w/ 14 levels "0-4","5-9","10-14",..: 1 1 1 1 1 1 1 1 1 2 ...
..$ RegionNum: num [1:1601] 7 7 7 7 7 7 7 7 7 7 ...
$ 8:`data.frame': 2880 obs. of 7 variables:
..$ sex : Factor w/ 2 levels "Females","Males": 2 2 2 2 2 2 2 2 2 2 ...
..$ age : Factor w/ 18 levels "0-4","5-9","10-14",..: 1 1 1 1 1 1 1 1 1 1 ...
..$ lga : Factor w/ 16 levels "Augusta-Mar..",..: 1 2 3 4 5 6 7 8 9 10 ...
..$ psn : num [1:2880] 294 66 85 188 1144 ...
..$ year : num [1:2880] 1991 1991 1991 1991 1991 ...
..$ agecomp : Factor w/ 14 levels "0-4","5-9","10-14",..: 1 1 1 1 1 1 1 1 1 1 ...
..$ RegionNum: num [1:2880] 8 8 8 8 8 8 8 8 8 8 ...
$ 9:`data.frame': 2694 obs. of 7 variables:
..$ sex : Factor w/ 2 levels "Females","Males": 2 2 2 2 2 2 2 2 2 2 ...
..$ age : Factor w/ 18 levels "0-4","5-9","10-14",..: 1 1 1 1 1 1 1 1 1 1 ...
..$ lga : Factor w/ 15 levels "Brookton (S)",..: 1 2 3 4 5 6 7 9 8 10 ...
..$ psn : num [1:2694] 49 67 38 46 67 51 104 214 44 69 ...
..$ year : num [1:2694] 1991 1991 1991 1991 1991 ...
..$ agecomp : Factor w/ 14 levels "0-4","5-9","10-14",..: 1 1 1 1 1 1 1 1 1 1 ...
..$ RegionNum: num [1:2694] 9 9 9 9 9 9 9 9 9 9 ...
platform i386-pc-mingw32
arch i386
os mingw32
system i386, mingw32
status
major 2
minor 0.1
year 2004
month 11
day 15
language R
Tom Mulholland
Senior Demographer
Spatial Information and Research
State and Regional Policy
Department for Planning and Infrastructure
Perth, Western Australia
+61 (08) 9264 7936
More information about the R-help
mailing list