加速跑步如果。。R中的else循环

加速跑步如果。。R中的else循环,r,R,有人知道如何加速运行以下命令吗?我想用字符串替换数字“月”值。。。e、 第1个月到“七月” 这个命令真的很慢,因为我试图实现它的数据帧是巨大的 for (i in 1:length(CO2$month)){ if(CO2$month[i]=='1') {CO2$months[i]<-'Jul'} else if(CO2$month[i]=='2') {CO2$months[i]<-'Aug'} else if(CO2$month[i]=='3') {CO2$m

有人知道如何加速运行以下命令吗?我想用字符串替换数字“月”值。。。e、 第1个月到“七月”

这个命令真的很慢,因为我试图实现它的数据帧是巨大的

for (i in 1:length(CO2$month)){
    if(CO2$month[i]=='1') {CO2$months[i]<-'Jul'} else
    if(CO2$month[i]=='2') {CO2$months[i]<-'Aug'} else
    if(CO2$month[i]=='3') {CO2$months[i]<-'Sept'} else
    if(CO2$month[i]=='4') {CO2$months[i]<-'Oct'} else
    if(CO2$month[i]=='5') {CO2$months[i]<-'Nov'} else
    if(CO2$month[i]=='6') {CO2$months[i]<-'Dec'} else
    if(CO2$month[i]=='7') {CO2$months[i]<-'Jan'} else
    if(CO2$month[i]=='8') {CO2$months[i]<-'Feb'} else
    if(CO2$month[i]=='9') {CO2$months[i]<-'Mar'} else
    if(CO2$month[i]=='10') {CO2$months[i]<-'Apr'} else
    if(CO2$month[i]=='11') {CO2$months[i]<-'May'} else
    if(CO2$month[i]=='12') {CO2$months[i]<-'Jun'}
}
for(1中的i:长度(CO2$月)){

如果(CO2$month[i]='1'){CO2$months[i]您可以在不使用循环和if-else的情况下执行此操作:

set.seed(21)
CO2 <- data.frame(month=as.character(sample(1:12,24,TRUE)),
  stringsAsFactors=FALSE)
MonthAbbRotated <- month.abb[c(7:12,1:6)]
CO2$months <- MonthAbbRotated[as.numeric(CO2$month)]

我可能遗漏了一些东西,但为什么不使用一个因子呢


CO2$month这也会起作用,即使对于没有像
month.abb这样的简洁功能的东西也是如此

Mon <- data.frame(month=1:12, months=c("Jul","Aug","Sept","Oct","Nov","Dec",
                                "Jan","Feb","Mar","Apr","May","Jun"))
CO2 <- merge(CO2, Mon, by="month", all.x=TRUE)

Mon在他的问题中有6个月的延迟:1对应于“Jul”而不是“Jan”。因此类似于
month.abb[(as.numeric(CO2$month)+6)%%12]
可以纠正延迟。这里稍微挑剔一下,如果你看一下OPs映射,他有九月,而不是月的九月。abb@frankc:我认为这是一个错误。:
month.abb
不是一个函数,它只是一个预定义的对象。+1非常聪明,但提问者需要将其包装为.character
才能得到结果与他们的示例不同。稍微短一点的版本:
factor(CO2$month,levels=c(7:12,1:6),labels=month.abb)
没错,但他可能并不关心factor级别和字符串之间的差异。如果他不关心factor,那么factor也应该更节省空间(不确定R是否使用字符串)。如果他这样做了,那么他可以将其包装为。字符,正如您指出的,请参阅我对您关于月份的答案的评论。abb.Op并不完全使用该映射,尽管他可能不是有意挑剔;只是想注意,您的答案与他们的答案略有不同。此外,字符在过去的几个R版本中已存储在哈希表中因此,它们至少和因子一样节省空间。
month =c("jul","aug","sep","oct","nov","dec","jan","feb","mar","apr","may","jun")

for (i in 1:length(CO2$month)){ CO2$month[i] = month[as.integer(CO2$month[i])]}
Mon <- data.frame(month=1:12, months=c("Jul","Aug","Sept","Oct","Nov","Dec",
                                "Jan","Feb","Mar","Apr","May","Jun"))
CO2 <- merge(CO2, Mon, by="month", all.x=TRUE)