我有一个月的专栏。它们用文字书写并存储为因子。我想为它们获取相应的数值,我尝试了以下代码,但它无法正常工作
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
}
}
答案 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)
另一种方法是使用match
和month.name
作为第二个参数。
match(MasterFile[, 2], month.name)
这将返回MasterFile中行数长度的向量,其值位于内置常量month.name
中。