【问题标题】:Converting Factor into numeric in R [closed]在R中将因子转换为数字[关闭]
【发布时间】:2017-05-06 02:18:58
【问题描述】:

我有一个月的专栏。它们用文字写成并存储为因子。我想为它们获取相应的数值,我尝试了以下代码,但它不起作用

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
                             }
}

【问题讨论】:

  • levels(MasterFile[,2,drop = TRUE] 是什么?如果出现关卡,则对其执行as.numeric

标签: r


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-06-20
      • 2015-01-05
      • 1970-01-01
      • 2020-10-05
      • 2015-10-15
      相关资源
      最近更新 更多