将行合并到组中

时间:2013-11-26 17:09:46

标签: r dataframe

我有一个像这样构建的数据框

age  share
...
 19   0.02
 20   0.01
 21   0.03
 22   0.04
...

我希望将每个年龄段合并为更大的同类群组,例如<20, 20-24, 25-29, 30-34, >=35(并对这些份额求和)。

当然这可以很容易地手工完成,但我几乎无法相信没有专门的功能。但是,我无法找到此功能。你能救我吗?

1 个答案:

答案 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;也就是说,2021之间不存在“差距”,以至于20.5将被排除在外。

从那里,如果您希望将归类于同一share下的行中的ageRange求和,您可以创建一个新的数据框:

> newData <- aggregate(share~ageRange, myData, sum)
> newData
  ageRange share
1   (0,20]  0.03
2  (20,24]  0.07