首页 > 解决方案 > 如何标记日期系列中的第一个和最后一个日期

问题描述

data<-data.frame(
ID=c(1,1,1,1,2,2,2,3,3,3,3,3),
Date=c("date1", "date2","date3","date4","date1", "date2","date3","date1",
       "date2","date3","date4","date5"))

我对每个人都有一个有序的日期系列。我想在每个人的第一个日期f前、最后一个日期l前和其他日期前标记o,以便在下面有这样的表格:

    ID  Date TypeOfDate
1   1 date1          f
2   1 date2          o
3   1 date3          o
4   1 date4          l
5   2 date1          f
6   2 date2          o
7   2 date3          l
8   3 date1          f
9   3 date2          o
10  3 date3          o
11  3 date4          o
12  3 date5          l

标签: rdate

解决方案


这将是我使用 tidyverse 的方法。

library(tidyverse)

data<-data.frame(
  ID=c(1,1,1,1,2,2,2,3,3,3,3,3),
  Date=c("date1", "date2","date3","date4","date1", "date2","date3","date1",
         "date2","date3","date4","date5"))

data %>% 
  group_by(ID) %>% 
  mutate(row_id=row_number()) %>% 
  mutate(TypeOfDate=case_when(row_id==max(row_number()) ~ "l",
                             row_id==min(row_number()) ~ "f",
                             TRUE ~ as.character("o")))
#> # A tibble: 12 x 4
#> # Groups:   ID [3]
#>       ID Date  row_id TypeOfDate
#>    <dbl> <chr>  <int> <chr>     
#>  1     1 date1      1 f         
#>  2     1 date2      2 o         
#>  3     1 date3      3 o         
#>  4     1 date4      4 l         
#>  5     2 date1      1 f         
#>  6     2 date2      2 o         
#>  7     2 date3      3 l         
#>  8     3 date1      1 f         
#>  9     3 date2      2 o         
#> 10     3 date3      3 o         
#> 11     3 date4      4 o         
#> 12     3 date5      5 l

reprex 包于 2020-12-04 创建(v0.3.0)


推荐阅读