我观察到了处于不同阶段(即阶段0-阶段4)的动物。在某些阶段,我在一个阶段(例如,阶段0-47天和阶段0-50天)有多个观察结果。这意味着该动物在第47天的第0阶段和第50天的第0阶段可见。但是其他阶段只能观察一次(例如,第1至57天)。我的代码指出,如果一个目镜有一个以上目击者,请使用特定代码;如果只有一个目击者,请使用另一个特定的代码。但是出于某种原因,尽管我们显然对该阶段有一个以上的观察,但是代码中也仅包含了一个阶段0。
我认为我的代码中的if条件语句可能是错误的,但是我似乎找不到任何替代代码来使用。
> head(dat)
SPENO Date MoltStatus DaysfromOct01 SEASON
1 PG(1)67 2012/11/16 0 47 2012
2 PG(1)67 2012/11/19 0 50 2012
3 PG(1)67 2012/11/26 1 57 2012
4 PG(1)67 2012/12/05 2 66 2012
5 PG(1)67 2012/12/16 3 77 2012
6 PG(1)67 2012/12/22 4 83 2012
如果我们只有一个观察到的特定阶段:
if(length(Molt[Molt==0])=1){ #If there is just one sighting of molt code 0
Diff0=(Date[Molt==1])-(Date[Molt==0]) #just get the difference between stage 0 date and stage 1 date ---to get duration of stage 0
Results=rbind(Results,c(SPENO[i],0,Diff0,(Date[Molt==0]),Season))
如果我们对一个特定的代码有多个观察结果:
if(length(Molt[Molt==0])>0&length(Molt[Molt==1])>0){ #If there is more than one sighting of molt code 0
First_0=min(Date[Molt==0]) #Calculate first 0 instance
First_1=min(Date[Molt==1]) #Calculate first 1 instance
Diff_0=First_1-First_0 #Calculate difference
Results=rbind(Results,c(SPENO[i],0,Diff_0,First_0,Season))
}
> Diff0
[1] 10 7
> Diff_0
[1] 10
我从阶段1到57天的阶段0的代码中获得的输出: 该代码为我提供了第一个代码的结果,但实际上我声明不应使用该代码,因为我有多个观察结果。然后输出是10和7(彼此相邻,最后弄乱了我的结果表),但是我不应该有代码的输出。在我声明应使用代码的第二部分中,输出为10,这是正确的。
预期输出应为:
> Diff0
[1] 0
> Diff_0
[1] 10