R Вывести значение x, когда значение y сначала равно нулю - PullRequest
1 голос
/ 26 мая 2020

Я использую данные о численности населения во времени и хочу определить первый год, в который популяция достигает нуля. Мои данные выглядят примерно так:

population<- c(500,50,25,2,0,0,0,0)
year<-(1:8)
dat<-data.frame(year,population)

Я хочу получить значение, показывающее год, когда численность населения впервые достигает нуля, поэтому в данном случае это будет 5. Я пробовал использовать функции if и ifelse так что, когда численность населения выше нуля, это NA, а когда оно равно нулю, это эквивалентно «году», но это просто начинает печатать номера года по порядку, а не выбирать год, который соответствует первой нулевой строке населения. Это также немного сбивает с толку, поскольку существует несколько лет с нулевым населением, но меня интересует только первый.

Любые предложения / идеи о том, как сделать это лучше и заставить это работать, будут очень признательны!

Ответы [ 3 ]

2 голосов
/ 26 мая 2020

Вы можете разделить фрейм данных на основе условия: в вашем случае наблюдения, где население = 0.

dat[dat$population == 0, ]

  year population
5    5          0
6    6          0
7    7          0
8    8          0

Оберните это в функцию минимума и выберите столбец года, и у вас есть решение:

min(dat[dat$population == 0,]$year) 
[1] 5
0 голосов
/ 26 мая 2020

Подмножество всех == 0, затем возьмите первое

head(dat$year[dat$population == 0],n=1)
[1] 5

или

dat$year[dat$population == 0][1]
[1] 5
0 голосов
/ 26 мая 2020

Вы можете использовать match, чтобы найти, где population впервые попадает в 0. В случае сортировки находит первый год.

dat$year[match(0, dat$population)]
#[1] 5
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...