我有不同的示例(在我的示例中为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语言的新手,真的很喜欢如何思考这个问题。
答案 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")