2013-09-29 36 views
1

因此,我在R中的數據框中有一個向量,稱爲月。我的數據幀被稱爲wr200meter。這裏是wr200meter$Month輸出:如何將R中的月份向量更改爲R中的數值

[1] May June June Nov Oct March April 

[8] May July July Sept June March April 

[15] June Oct August June Oct Sept June 

[22] August August August 

當我做as.numeric(wr200meter$Month)我得到:

[1] 6 4 4 7 8 5 1 6 3 3 9 4 5 1 4 8 2 4 8 9 4 2 2 2 

我想要得到的是一個十進制數。例如,6月份我想要0.5和9月份,我想要0.75。有人可以告訴我: 1)如何得到我想要的十進制數字 2)那些從as.numeric(wr200meter$Month)輸出的數字從哪裏來?

謝謝!

回答

4

看着輸出,我懷疑的wr2000meter$Monthfactor與一些levels。將它們強制轉換爲數字時,R根本不查看level的字符串表示形式,而是查看level的索引。有關更多詳細信息,請參閱R Inferno的第8.2.1節。

在這種情況下,R方便地爲我們提供了月份的名稱以及縮略詞built-in constants。然而,由於您的數據包含一些縮寫,有些全名,我們需要得到一個小創意在這裏和使用grep以匹配部分的名稱,以及:

d <- factor(c("May", "June", "June", "Nov", "Oct", "March", "April", "May", "July", "July", "Sept", "June", "March", "April", "June", "Oct", "August", "June", "Oct", "Sept", "June", "August", "August", "August")) 
sapply(d, function (x) { grep(x, month.name); })/12 
[1] 0.4166667 0.5000000 0.5000000 0.9166667 0.8333333 0.2500000 0.3333333 
[8] 0.4166667 0.5833333 0.5833333 0.7500000 0.5000000 0.2500000 0.3333333 
[15] 0.5000000 0.8333333 0.6666667 0.5000000 0.8333333 0.7500000 0.5000000 
[22] 0.6666667 0.6666667 0.6666667 

因此,這應該產生你所尋找的輸出:

sapply(wr200meter$Month, function (x) { grep(x, month.name); })/12 
4
monfac <- factor(substr(mons,1,3), levels=month.abb) 
as.numeric(monfac)/12 
[1] 0.4166667 0.5000000 0.5000000 0.9166667 0.8333333 0.2500000 0.3333333 
[8] 0.4166667 0.5833333 0.5833333 0.7500000 0.5000000 0.2500000 0.3333333 
[15] 0.5000000 0.8333333 0.6666667 0.5000000 0.8333333 0.7500000 0.5000000 
[22] 0.6666667 0.6666667 0.6666667 

兩個month.abbmonth.name是內置在R.矢量你的矢量具有縮寫和完整拼寫的混合物,要求任一者或修剪我一樣grep -ing如@musically_u沒有。他使用grep來查找其中一個矢量的位置,並且我創建了一個矢量,它的級別按日曆月的自然順序排列,然後我將其轉換爲數字。