【发布时间】:2012-12-19 11:45:36
【问题描述】:
我有一个如下所示的数据框:
species<-"ABC" ind<-rep(1:4,each=24) hour<-rep(seq(0,23,by=1),4) month<-rep(seq(1,12),8) depth<-runif(length(ind),1,50) df<-data.frame(species,ind,month,hour,depth)
我想要的是使用月份列来指定每个季节的间隔,并将这些值返回到来自同一数据框的新列中。我一直在使用这个代码,这似乎工作正常,
# Classify months into seasons summer<-c(1,2,12) fall<-c(3,4,5) winter<-c(6,7,8) spring<-c(9,10,11) # Create a new column with seasons df$season<-NA for(i in 1:nrow(df)){ if(df$month[i]%in%summer){df$season[i]<-"1-summer"} else if(df$month[i]%in%fall){df$season[i]<-"2-fall"} else if(df$month[i]%in%winter){df$season[i]<-"3-winter"} else if(df$month[i]%in%spring){df$season[i]<-"spring"}}
但是,这个循环已经在一个更大的循环内部,它具有更复杂和更大的数据库。所以我一直在寻找一种更快、更有效的方法。我使用循环而不是切割或子集原始数据框的原因是因为我使用的第一个循环是对个体动物进行分离和分析。结果数据框的长度因动物而异,我遇到的一个问题是并非所有动物都在所有月份都存在,所以当我试图在循环内为特定季节不存在的动物分配季节时, 然后 R 给了我一个错误信息...
【问题讨论】:
标签: r loops conditional-statements intervals