2016-12-20 11 views
0

私は月の列を持っています。彼らは言葉で書かれ、要因として格納されます。対応する数値を取得したいが、次のコードを試したが動作していない。ファクターを数値に変換するR

Latest<-MasterFile 
for(i in 1:nrow(MasterFile)){ 
    if(MasterFile[i,2]=="Januray"){ 
    MasterFile[i,2]=1 
    } 
    else if(MasterFile[i,2]=="February"){ 
     MasterFile[i,2]=2 
    } 
     else if(MasterFile[i,2]=="March"){ 
     MasterFile[i,2]=3 
     } 
     else if(MasterFile[i,2]=="April"){ 
      MasterFile[i,2]=4 
     } 
      else if(MasterFile[i,2]=="May"){ 
      MasterFile[i,2]=5 
      } 
      else if(MasterFile[i,2]=="June"){ 
       MasterFile[i,2]=6 
      } 
       else if(MasterFile[i,2]=="July"){ 
       MasterFile[i,2]=7 
       } 
        else if(MasterFile[i,2]=="August"){ 
        MasterFile[i,2]=8 
        } 
        else if(MasterFile[i,2]=="September"){ 
         MasterFile[i,2]=9 
        } 
         else if(MasterFile[i,2]=="October"){ 
          MasterFile[i,2]=10 
         } 
          else if(MasterFile[i,2]=="November"){ 
          MasterFile[i,2]=11 
          } 
          else if(MasterFile[i,2]=="December"){ 
           MasterFile[i,2]=12 
          } 
} 
+1

レベルが表示されている場合、 'levels(MasterFile [、2、drop = TRUE]')は何ですか? 'as.numeric'を実行します –

答えて

3

おそらく月のレベルはアルファベットである。数値に変換する前に、正しい順序でそれらをリファクタリング:

as.numeric(factor(MasterFile[, 2], levels = month.name)) 

これは組み込み変数month.nameas.numericがそれに対応するレベル番号にレベルを変換し、その時点で、月の順に正しく因子の水準を注文するために使用します。

あなたを助けるかもしれないいくつかのさらに読書:Vectorized if statement in R、(あなたは、少なくともifelse()を使用してのではなくfor() {if() else}しなければならない)、より良いアプローチがしばしばあります。Alternatives to nested ifelse in R

2

別の方法は、二通りmonth.namematchを使用することです引数。

match(MasterFile[, 2], month.name) 

これが値が内蔵定数month.nameにある位置にマスターファイル内の行の数の長さのベクトルを返します。

関連する問題