ТАБЛИЦА возрастных групп - PullRequest
0 голосов
/ 23 мая 2019

У меня разные (2 в моем примере, 85 в моих реальных данных) и я хотел бы создать таблицу возрастных классов (0-10, 11-20,21-30,31-40 и т. Д.) Для каждой группы:

 group age
1      1  34
2      1  37
3      1  22
4      1  10
5      1  11
6      1  12
7      1  14
8      2  56
9      2  46
10     2  25
11     2  24
12     2  13
13     2  13
14     2  45
15     2  45
16     2  23
17     2  56
18     2  54
19     2  31
20     2  68

Я пробовал различные решения с форума:

mydf$ageclass<-cut(mydf$age, seq(0,100,10)) 

работает только для всего df и не имеет возможности групп.

mydf$ageclass<-Freq(mydf$age, breaks=c(0,20,30,40,50,60,70,80))

также возвращает только решение для всего фрейма данных

У меня нет способа интегрировать «группу» в эти функции.

Кроме того, оба возвращают столбец с классом возраста, заданным как '(30, 40] '(имеется в виду верхняя и нижняя граница класса), и я хотел бы, чтобы результатом была следующая таблица:

group    0-10    11-20    21-30    31-40
1
2

Что мне не хватает? Возможно, цикл for? Я новичок в базе Rи действительно хотел бы получить несколько советов о том, как думать о проблеме.

1 Ответ

1 голос
/ 23 мая 2019

Это то, что вы пытаетесь достичь?

df$ageclass <- with(mydf, cut(age, seq(0,100,10)))
with(df, table(group, ageclass))

     ageclass
group (0,10] (10,20] (20,30] (30,40] (40,50] (50,60] (60,70] (70,80] (80,90] (90,100]
    1      1       3       1       1       0       0       0       0       0        0
    2      0       2       3       1       3       3       1       0       0        0

Редактировать

cut() также имеет аргумент меток:

df$ageclass <- with(mydf, cut(age, seq(0,100,10), labels = paste0(seq(0,90,10) + 1, "-", seq(0,90,10) + 10)))
with(df, table(group, ageclass))

     ageclass
group 1-10 11-20 21-30 31-40 41-50 51-60 61-70 71-80 81-90 91-100
    1    1     3     1     1     0     0     0     0     0      0
    2    0     2     3     1     3     3     1     0     0      0

Данные

mydf <- structure(list(group = c(1L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 
2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L), age = c(37L, 22L, 10L, 
11L, 12L, 14L, 56L, 46L, 25L, 24L, 13L, 13L, 45L, 45L, 23L, 56L, 
54L, 31L, 68L)), row.names = c(NA, -19L), class = "data.frame")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...