Learn R Programming

Ecfun (version 0.3-2)

countsByYear: Allocate totals by year

Description

Allocate total to countByYear for a constant count per day between start and end for multiple events.

Usage

countsByYear(data, start="Start1", end='End1', 
             total='BatDeath', event='WarName', 
             endNA=max(data[, c(start,end)]))

Value

a numeric matrix whose

colSums match total with names for all the years between start and end. The number of columns of the output matrix match the number of rows of data. The

colSums match total.

Arguments

data

a data.frame with columns start, end, and total

start, end

columns of data of class Date with start <= end during which total is to be allocated

total

A quantity to be allocated by year giving a constant rate per day.

event

name of the event whose total is to be allocated.

endNA

Date to use if is.na(data[, end]).

Author

Spencer Graves

Examples

Run this code
##
## 1.  data.frame(WarName, Start1, End1, BatDeath)
##
start73 <- as.Date('1973-01-22')
tstWars <- data.frame(WarName=c('short', '2yr', '10yr'), 
    Start1=c(start73, start73+365, start73-365), 
    End1=start73+c(99, 2*365, NA), 
    BatDeath=c(100, 123, 456)) 
##
## 2.  do
##
deathsByYr <- countsByYear(tstWars, 
              endNA=start73+9*365.2)

# check 
Counts <- matrix(0, 11, 3, 
    dimnames=list(c(1972:1982), tstWars$WarName) )
Counts['1973', 1] <- 100
Counts[as.character(1974:1975), 2] <- with(tstWars, 
    countByYear(Start1[2], End1[2], BatDeath[2]) )
Counts[as.character(1972:1982), 3] <- with(tstWars, 
    countByYear(Start1[3], start73+9*365.2, BatDeath[3]) )

stopifnot(
all.equal(deathsByYr, Counts)
)
  

Run the code above in your browser using DataLab