r - 如何标记日期系列中的第一个和最后一个日期
问题描述
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
解决方案
这将是我使用 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)
推荐阅读
- angular - 如何将 routerLink 与 innerHTML 一起使用
- c - 在这个函数中正确的指针没有返回到调用函数
- mysql - 在我的情况下,如何在没有 GROUP BY 的情况下使用 GROUP_CONCAT?
- tsql - t-sql 函数,如 sum(x) 过滤器(条件)的“过滤器”(按
- reactjs - 在redux中我的动作被调用但不是reducer,我该如何解决它?
- sql - 无法使用自动生成的 ID 保存模型记录
- node.js - 如何为访问 aws 资源的函数编写单元测试?
- perl - 在 IPC::ShareLite 对象中存储多个项目
- javascript - 如何计算 JavaScript 中两个字符串中的常见字符?
- java - 如何使用 Main 和 Subreport 两个不同的数据源创建 iReport