Используя условие if, использовать этот фрагмент кода, только если у нас есть только одно наблюдение, и пропустить код, если у нас более одного наблюдения. - PullRequest
0 голосов
/ 19 июня 2019

У меня есть наблюдения за животными на разных стадиях (т. Е. Стадия 0 - стадия 4).На некоторых этапах у меня есть более одного наблюдения за этап (например, этап 0–47 дней и этап 0–50 дней).Это означает, что животное было замечено на стадии 0 в день 47 и на стадии 0 в день 50. Но другие стадии можно наблюдать только один раз (например, стадия 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

Вывод, который я получаю из кода для этапа 0, когда этап 1 - 57 днейКод дает мне результаты для первого кода, где я фактически заявляю, что он не должен использовать код, потому что у меня более одного наблюдения.Выходные данные тогда - 10 и 7 (рядом друг с другом, что портит мою таблицу результатов в конце), но у меня не должно быть вывода для кода.В то время как для второй части, где я заявляю, что код должен быть использован, выходной результат дается как 10, что является правильным.

Ожидаемый результат должен быть просто:

> Diff0
[1] 0

> Diff_0
[1] 10

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...