2013-11-26 70 views
1

我有被構造這樣合併行成組

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

欲每個年齡組合併成較大的羣組等<20, 20-24, 25-29, 30-34, >=35(和求和股)的數據幀。

當然這可以很容易地通過手工完成,但我幾乎不能相信沒有專門的功能。但是,我無法找到這個功能。你可以幫我嗎?

+4

看看'cut'功能,它你在找什麼;) –

+0

@Jilber謝謝 - 我試過切,但我不知道如何處理股份列... – speendo

+1

你應該使用cut2在這種情況下,我相信它在hmisc包 – PKumar

回答

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 S IN在相同ageRange分類行進行彙總,您可以創建新的數據幀:

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

好的,這有效。但是,實際的合併過程如何?所以行1和2以及3和4合併爲一行?希望這不是一個愚蠢的問題... – speendo

+0

我敢肯定這不是一個愚蠢的問題;不幸的是,我不明白你的意思。你能否更新你的問題來顯示你想要的輸出結果? – gung

+0

我想我明白了:'aggregate(share〜ageRange,myData,sum)' - 你會把這個添加到你的答案中嗎? – speendo