我正在使用一段时间内的人口数据,并希望确定人口达到零的第一年。我的数据类似于此:
population<- c(500,50,25,2,0,0,0,0)
year<-(1:8)
dat<-data.frame(year,population)
我想产生一个值,该值表示总体首次达到零的年份,因此在本例中为5。我尝试使用if和ifelse函数,以便当总体大于零时为NA,何时为零。等于零,等于“年”,但这只是开始按顺序打印年数,而不是选择与第一个0人口行相对应的年。由于存在多个零人口年份,所以它也有些混乱,但是我只对第一个年份感兴趣。
关于如何更好地做到这一点并使其发挥作用的任何建议/想法,将不胜感激!
您可以基于以下条件对数据框进行子集化:在您的情况下,为总体= 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
您可以使用match
查找第一次population
击中0
的位置。如果进行了排序,则会找到第一年。
dat$year[match(0, dat$population)]
#[1] 5
全部细分== 0,然后取第一个
head(dat$year[dat$population == 0],n=1)
[1] 5
或
dat$year[dat$population == 0][1]
[1] 5