Может быть более уместный способ перекодирования вашей возрастной переменной с использованием чего-то вроде recode
из пакета car
, особенно если учесть, что ваша текущая переменная возраста закодирована с уровнями, которые хорошо сортируются как символы. Но только для нескольких уровней я часто просто перекодирую их вручную, создавая новую переменную возраста, и этот метод является хорошей практикой для просто «выполнения вещи» в R:
#Reading your data in from a text file that I made via copy/paste
dat <- read.table("~/Desktop/soEx.txt",sep="",header=TRUE)
#Make sure Age.Group is ordered and init new age variable
dat$Age.Group <- factor(dat$Age.Group,ordered=TRUE)
dat$AgeGroupNew <- rep(NA,nrow(dat))
#The recoding
dat$AgeGroupNew[dat$Age.Group <= "0"] <- "0"
dat$AgeGroupNew[dat$Age.Group == "01-4"] <- "01-4"
dat$AgeGroupNew[dat$Age.Group >= "05-09" & dat$Age.Group <= "10-14" ] <- "05-14"
dat$AgeGroupNew[dat$Age.Group > "10-14" ] <- "15+"
Затем мы можем генерировать резюме, используя ddply
и summarise
:
datNew <- ddply(dat,.(District,Gender,Year,Month,AgeGroupNew),summarise,
TotalDeaths = sum(Total.Deaths))
Сначала я волновался, потому что я получил 91 смерть вместо 104, как вы указали, но я считал вручную, и 91, я думаю, прав. Возможно, опечатка.