First, use cut
or a table
instead of all those if
's and else
's:
CutOffs1 <- c(0,8,10,12,13,14,15,16)
CutOffs2 <- c(0,8,11,12,13,14,15,16)
CutOffs3 <- c(0,15,19,20,21,22,23,24)
CutOffs <- cbind(CutOffs1, CutOffs2, CutOffs3)
MyTable <- apply(CutOffs, 2, function(X) cut(1:24, X, FALSE)-1)
CutOffs1 CutOffs2 CutOffs3
[1,] 0 0 0
[2,] 0 0 0
[3,] 0 0 0
[4,] 0 0 0
[5,] 0 0 0
[6,] 0 0 0
[7,] 0 0 0
[8,] 0 0 0
[9,] 1 1 0
[10,] 1 1 0
[11,] 2 1 0
[12,] 2 2 0
[13,] 3 3 0
[14,] 4 4 0
[15,] 5 5 0
[16,] 6 6 1
[17,] NA NA 1
[18,] NA NA 1
[19,] NA NA 1
[20,] NA NA 2
[21,] NA NA 3
[22,] NA NA 4
[23,] NA NA 5
[24,] NA NA 6
You will also want to cut
the years into factors.
original.file$Period <- cut(original.file$year, c(2000,2001, 2007, 2011), FALSE,
include.lowest=TRUE)
## To demonstrate:
> cbind(2000:2011, cut(2000:2011, c(2000,2001, 2007, 2011), FALSE,
+ include.lowest=TRUE))
[,1] [,2]
[1,] 2000 1
[2,] 2001 1
[3,] 2002 2
[4,] 2003 2
[5,] 2004 2
[6,] 2005 2
[7,] 2006 2
[8,] 2007 2
[9,] 2008 3
[10,] 2009 3
[11,] 2010 3
[12,] 2011 3
Then you should be able to do:
Degrees <- apply(original.file, 1, function(X) MyTable[X['Schooling'], X['Period']])