You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于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包的分组、滞后函数和条件判断来实现:

  1. 先加载dplyr包(未安装的话先运行install.packages("dplyr"))
  2. 按Tag分组,用lag()获取每条记录对应的上一个Section值
  3. 通过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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 01:54:22