使用if条件,仅当我们只有一个观察值时才使用这段代码,而如果我们有多个观察值则跳过该代码

时间:2019-06-19 08:18:29

标签: r

我观察到了处于不同阶段(即阶段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

0 个答案:

没有答案