年龄组表

时间:2019-05-23 11:24:15

标签: r

我有不同的示例(在我的示例中为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 个答案:

答案 0 :(得分:1)

这是您要实现的目标吗?

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")