在R中将因子转换为数字

时间:2016-12-20 19:09:07

标签: 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
                             }
}

2 个答案:

答案 0 :(得分:3)

月份级别可能是按字母顺序排列的。在转换为数字之前,请按正确的顺序重构它们:

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

这使用内置变量month.name按月顺序正确排序因子级别,此时as.numeric将级别转换为相应的级别数。

可能对您有所帮助的一些进一步阅读:Vectorized if statement in R,(您至少应该使用ifelse()而不是for() {if() else}),但通常有更好的方法:Alternatives to nested ifelse in R

答案 1 :(得分:2)

另一种方法是使用matchmonth.name作为第二个参数。

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

这将返回MasterFile中行数长度的向量,其值位于内置常量month.name中。