Here is the dplyr
equivalent to @droopy's answer:
tbl_df( x ) %.%
group_by( year, gender ) %.%
summarise( P = mean(union == "yes") )
Source: local data frame [8 x 3]
Groups: year
year gender P
1 2001 female 1.0
2 2001 male 0.5
3 2002 female 0.5
4 2002 male 0.0
5 2003 female 0.0
6 2003 male 0.5
7 2004 female 0.5
8 2004 male 0.0
... and for completeness also the data.table
solution:
as.data.table(x)[ , list( P = mean( union == "yes" ) ), by = list( year, gender ) ]
year gender P
1: 2001 male 0.5
2: 2001 female 1.0
3: 2002 male 0.0
4: 2002 female 0.5
5: 2003 male 0.5
6: 2003 female 0.0
7: 2004 male 0.0
8: 2004 female 0.5