如何评估R中连续年份物种的命运(消失、添加或持续)

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

块引用

我在数据框中有几个不同长度的时间序列,如下所示:

我想看看一个物种是否从一年到另一年减少、增加或持续存在。输出可以是这样的:

r dataframe dplyr data.table reshape
1个回答
0
投票

你可以这样做:

df2 <- df |>
  mutate(alive = 1) |>
  group_by(time_ID, species) |>
  complete(Year = min(df$Year):max(df$Year), fill = list(alive = 0)) |> 
  mutate(state = case_when(!alive & !cumsum(alive) ~ "unborn",
                            alive & cumsum(alive) == 1 ~ "new",
                            alive & cumsum(alive) > 1 ~ "old",
                            TRUE ~ "dead")) |>
  ungroup()

输出:

# A tibble: 15 × 5
   time_ID species  Year alive state 
     <int> <chr>   <int> <dbl> <chr> 
 1       1 A        2000     1 new   
 2       1 A        2001     1 old   
 3       1 A        2002     0 dead  
 4       1 B        2000     1 new   
 5       1 B        2001     0 dead  
 6       1 B        2002     0 dead  
 7       1 C        2000     1 new   
 8       1 C        2001     1 old   
 9       1 C        2002     1 old   
10       1 D        2000     0 unborn
11       1 D        2001     0 unborn
12       1 D        2002     1 new   
13       1 E        2000     0 unborn
14       1 E        2001     0 unborn
15       1 E        2002     1 new

然后我们可以做这样的事情:

df2 |> pivot_wider(id_cols = c(time_ID, species), names_from = Year, values_from = state)

创建:

  time_ID species `2000` `2001` `2002`
    <int> <chr>   <chr>  <chr>  <chr> 
1       1 A       new    old    dead  
2       1 B       new    dead   dead  
3       1 C       new    old    old   
4       1 D       unborn unborn new   
5       1 E       unborn unborn new   
© www.soinside.com 2019 - 2024. All rights reserved.