基于DataFrame的日期与分区对对象变动类型进行分类
问题描述
现有如下R语言DataFrame:
df <- read.table(text = " Date Tag Section 1/21/22 001 1 1/22/22 001 2 1/23/22 001 3 1/21/22 002 2 1/22/22 002 1 1/23/22 002 2", header = TRUE)
该DataFrame已按Tag编号和日期从旧到新完成分组。需要判断各Tag对应的对象在不同日期间的状态:
- 保持在同一分区
- 向上移动分区(如从1到2)
- 向下移动分区(如从2到1)
每个Tag的第一条记录无变动标记,后续记录需标记变动类型。
解决方案
可以用dplyr包的分组、滞后函数和条件判断来实现:
- 先加载
dplyr包(未安装的话先运行install.packages("dplyr")) - 按
Tag分组,用lag()获取每条记录对应的上一个Section值 - 通过
case_when()判断变动类型
完整代码如下:
library(dplyr) df_result <- df %>% group_by(Tag) %>% mutate( prev_section = lag(Section), movement = case_when( is.na(prev_section) ~ NA_character_, # 第一条记录无标记 Section == prev_section ~ "保持同一分区", Section > prev_section ~ "向上移动分区", Section < prev_section ~ "向下移动分区" ) ) %>% ungroup() %>% select(-prev_section) # 可选:移除中间计算的辅助列 print(df_result)
输出结果
运行代码后得到的结果如下:
# A tibble: 6 × 4 Date Tag Section movement <chr> <chr> <int> <chr> 1 1/21/22 001 1 NA 2 1/22/22 001 2 向上移动分区 3 1/23/22 001 3 向上移动分区 4 1/21/22 002 2 NA 5 1/22/22 002 1 向下移动分区 6 1/23/22 002 2 向上移动分区
内容的提问来源于stack exchange,提问作者Ryan Gary
相关产品推荐
相关产品推荐

