Извлечение определенных данных из иерархических данных в R - PullRequest
0 голосов
/ 10 июля 2011

У меня есть датафрейм, состоящий из 6 столбцов.Каждый столбец с 1 по 5 имеет отдельные имена / значения, такие как район, год, месяц, возрастной интервал и пол.Шестой столбец - это число случаев смерти для этой конкретной комбинации.

               District Gender Year Month Age.Group Total.Deaths
1              Eastern  Female 2003     1        -1            0
2              Eastern  Female 2003     1        -2            2
3              Eastern  Female 2003     1         0            2
4              Eastern  Female 2003     1      01-4            1
5              Eastern  Female 2003     1     05-09            0
6              Eastern  Female 2003     1     10-14            1
7              Eastern  Female 2003     1     15-19            0
8              Eastern  Female 2003     1     20-24            4
9              Eastern  Female 2003     1     25-29            9
10             Eastern  Female 2003     1     30-34            3
11             Eastern  Female 2003     1     35-39            7
12             Eastern  Female 2003     1     40-44            5
13             Eastern  Female 2003     1     45-49            5
14             Eastern  Female 2003     1     50-54            8
15             Eastern  Female 2003     1     55-59            5
16             Eastern  Female 2003     1     60-64            4
17             Eastern  Female 2003     1     65-69            7
18             Eastern  Female 2003     1     70-74            8
19             Eastern  Female 2003     1     75-79            5
20             Eastern  Female 2003     1     80-84           10
21             Eastern  Female 2003     1       85+           11
22             Eastern  Female 2003     2        -1            0
23             Eastern  Female 2003     2        -2            0
24             Eastern  Female 2003     2         0            4
25             Eastern  Female 2003     2      01-4            1
26             Eastern  Female 2003     2     05-09            2
27             Eastern  Female 2003     2     10-14            2
28             Eastern  Female 2003     2     15-19            0

Я хотел бы отфильтровать или извлечь меньшие кадры данных из этого большого кадра данных.Например, я хотел бы иметь только четыре возрастные группы.Каждая из этих четырех возрастных групп будет содержать:

Group 0: Consisting of Age.Group -1, -2 and 0.
Group 1-4: Consisting of Age.Group 01-4
Group 5-14: Consisting of Age.Group 05-09 and 10-14
Group 15+: Consisting of Age.Group 15-19 to 85+

. Затем Total.Deaths будет суммой для каждой из этих групп.

Поэтому я хочу, чтобы это выглядело так

               District Gender Year Month Age.Group Total.Deaths
1              Eastern  Female 2003     1         0            4
2              Eastern  Female 2003     1      01-4            1
3              Eastern  Female 2003     1     05-14            1
4              Eastern  Female 2003     1       15+            104
5              Eastern  Female 2003     2         0            4
6              Eastern  Female 2003     2      01-4            1
7              Eastern  Female 2003     2     05-14            4
8              Eastern  Female 2003     2       15+            ...

У меня много данных, и я искал несколько дней, но не смог найти функцию, которая могла бы помочь сделать это.

1 Ответ

1 голос
/ 10 июля 2011

Может быть более уместный способ перекодирования вашей возрастной переменной с использованием чего-то вроде 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, я думаю, прав. Возможно, опечатка.

...