我有一个像这样构建的数据框
age share
...
19 0.02
20 0.01
21 0.03
22 0.04
...
我希望将每个年龄段合并为更大的同类群组,例如<20, 20-24, 25-29, 30-34, >=35
(并对这些份额求和)。
当然这可以很容易地手工完成,但我几乎无法相信没有专门的功能。但是,我无法找到此功能。你能救我吗?
答案 0 :(得分:4)
您要使用的是?cut。例如:
> myData <- read.table(text="age share
+ 19 0.02
+ 20 0.01
+ 21 0.03
+ 22 0.04", header=TRUE)
>
> myData$ageRange <- cut(myData$age, breaks=c(0, 20, 24, 29, 34, 35, 100))
> myData
age share ageRange
1 19 0.02 (0,20]
2 20 0.01 (0,20]
3 21 0.03 (20,24]
4 22 0.04 (20,24]
请注意,您需要包含低于最低数字且高于最高数字的断点,以便正确形成这些间隔。另请注意,断点完全(例如)20
,而不是<=20, >=21
;也就是说,20
和21
之间不存在“差距”,以至于20.5
将被排除在外。
从那里,如果您希望将归类于同一share
下的行中的ageRange
求和,您可以创建一个新的数据框:
> newData <- aggregate(share~ageRange, myData, sum)
> newData
ageRange share
1 (0,20] 0.03
2 (20,24] 0.07