2013-03-07 1 views
3

Я хочу создать временную серию с 01/01/2004 по 31/12/2010 данных ежедневной смертности в R. Необработанные данные, которые у меня есть сейчас (CSV-файл), имеют столбцы день-месяц-год и каждая строка является случаем смерти. Поэтому, если смертность в определенный день равна, например, четырем, с этой датой четыре строки. Если в конкретный день не сообщается о смерти, этот день не указывается в наборе данных.Как создавать временные ряды, группируя записи в R?

Что мне нужно, это временный ряд с 2557 строками (с 01/01/2004 по 31/12/2010), в котором указано общее количество случаев смерти в день. Если в определенный день нет случая смерти, мне все равно нужно, чтобы этот день был в списке с присвоенным ему «0».

Кто-нибудь знает, как это сделать?

Спасибо, Gosia

Пример исходных данных:

day month year 
1 1 2004 
3 1 2004 
3 1 2004 
3 1 2004 
6 1 2004 
7 1 2004 

Что мне нужно:

day month year deaths 
1 1 2004 1 
2 1 2004 0 
3 1 2004 3 
4 1 2004 0 
5 1 2004 0 
6 1 2004 1 
+0

Вы должны добавить данные выборки. –

ответ

3
df <- read.table(text="day month year 
1 1 2004 
3 1 2004 
3 1 2004 
3 1 2004 
6 1 2004 
7 1 2004",header=TRUE) 

#transform to dates 
dates <- as.Date(with(df,paste(year,month,day,sep="-"))) 

#contingency table 
tab <- as.data.frame(table(dates)) 
names(tab)[2] <- "deaths" 
tab$dates <- as.Date(tab$dates) 

#sequence of dates 
res <- data.frame(dates=seq(from=min(dates),to=max(dates),by="1 day")) 
#merge 
res <- merge(res,tab,by="dates",all.x=TRUE) 
res[is.na(res$deaths),"deaths"] <- 0 
res 
#  dates deaths 
#1 2004-01-01  1 
#2 2004-01-02  0 
#3 2004-01-03  3 
#4 2004-01-04  0 
#5 2004-01-05  0 
#6 2004-01-06  1 
#7 2004-01-07  1 
+0

@ Roland - Большое спасибо! Именно то, что мне было нужно, Gosia – Gosia

+0

@ Gosia Не стесняйтесь галочку в верхней левой части этого ответа. Это позволяет людям понять, что на ваш вопрос был дан ответ на ваше удовлетворение. – Roland