R当y值先为零时打印x值

问题描述 投票:1回答:3

我正在使用一段时间内的人口数据,并希望确定人口达到零的第一年。我的数据类似于此:

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

我想产生一个值,该值表示总体首次达到零的年份,因此在本例中为5。我尝试使用if和ifelse函数,以便当总体大于零时为NA,何时为零。等于零,等于“年”,但这只是开始按顺序打印年数,而不是选择与第一个0人口行相对应的年。由于存在多个零人口年份,所以它也有些混乱,但是我只对第一个年份感兴趣。

关于如何更好地做到这一点并使其发挥作用的任何建议/想法,将不胜感激!

r
3个回答
2
投票

您可以基于以下条件对数据框进行子集化:在您的情况下,为总体= 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
投票

您可以使用match查找第一次population击中0的位置。如果进行了排序,则会找到第一年。

dat$year[match(0, dat$population)]
#[1] 5

0
投票

全部细分== 0,然后取第一个

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

dat$year[dat$population == 0][1]
[1] 5
© www.soinside.com 2019 - 2024. All rights reserved.