I have a dataset which simplified look something like this:
YEAR = c(2009,2009,2009,2009,2009,2009,2009,2010,2010,2010,2010,2010,2010,2010)
FROM = c("A","C","B","D","B","A","C","A","C","B","A","D","B","A")
TO = c("B","D","C","A","D","C","B","B","A","D","D","C","A","D")
DATA = data.frame(YEAR,FROM,TO)
YEAR    FROM    TO
2009    A       B
2009    C       D
2009    B       C
2009    D       A
2009    B       D
2009    A       C
2009    C       B
2010    A       B
2010    C       A
2010    B       D
2010    A       D
2010    D       C
2010    B       A
2010    A       D
What I want is two additional columns, let's say OCC_FROM and OCC_TO, that is the cumulative count of occurrences in both FROM and TO columns in prior rows, by YEAR. Like this:
YEAR    FROM    TO  OCC_FROM    OCC_TO
2009    A       B   0           0
2009    C       D   0           0
2009    B       C   1           1
2009    C       A   2           1
2009    B       D   2           1
2009    A       C   2           3
2009    C       B   4           3
2010    A       B   0           0
2010    C       A   0           1
2010    B       D   1           0
2010    A       B   2           2
2010    D       C   1           1
2010    B       A   3           3
2010    A       D   4           2
What I've managed to produce, with the help of Cumulative count in R, is this, which is obviously not quite what I want since it doesn't take YEAR into consideration:
DATA$OCC_FROM = sapply(1:length(DATA$FROM),function(i)sum(DATA$FROM[i]==DATA$FROM[1:i]))+sapply(1:length(DATA$FROM),function(i)sum(DATA$FROM[i]==DATA$TO[1:i]))-1
DATA$OCC_TO = sapply(1:length(DATA$TO),function(i)sum(DATA$TO[i]==DATA$FROM[1:i]))+sapply(1:length(DATA$TO),function(i)sum(DATA$TO[i]==DATA$TO[1:i]))-1
YEAR    FROM    TO  OCC_FROM    OCC_TO
2009    A       B   0           0
2009    C       D   0           0
2009    B       C   1           1
2009    C       A   2           1
2009    B       D   2           1
2009    A       C   2           3
2009    C       B   4           3
2010    A       B   3           4
2010    C       A   5           4
2010    B       D   5           2
2010    A       B   5           6
2010    D       C   3           6
2010    B       A   7           6
2010    A       D   7           4
Edit: I also want to be able to sum two columns cumulatively based on FROM and TO, by YEAR as before. For simplicity I'll use OCC_FROM and OCC_TO. Like this:
YEAR    FROM    TO  OCC_FROM    OCC_TO    TOTAL_FROM    TOTAL_TO
2009    A       B   0           0         0             0
2009    C       D   0           0         0             0
2009    B       C   1           1         0             0
2009    C       A   2           1         1             0
2009    B       D   2           1         1             0
2009    A       C   2           3         1             3
2009    C       B   4           3         6             3
2010    A       B   0           0         0             0
2010    C       A   0           1         0             0
2010    B       D   1           0         0             0
2010    A       B   2           2         1             1
2010    D       C   1           1         0             0
2010    B       A   3           3         3             3
2010    A       D   4           2         6             1
 
     
     
    