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

如何在R语言中识别跨年度数据的新增/删除记录

解决方案

可以使用dplyr包高效处理多年度的Ticker新增识别,以下是具体实现步骤:

步骤1:加载依赖包并准备数据

library(dplyr)

# 示例数据
a <- data.frame(Ticker=c("AA","AA","BBX","AA","AAAAX","BBX"), Year=c(2009,2010,2010,2011,2011,2011))

步骤2:计算哑变量I和A

b <- a %>%
  # 按Ticker分组,记录每个Ticker首次出现的年度
  group_by(Ticker) %>%
  mutate(first_year = min(Year)) %>%
  ungroup() %>%
  # 按年度分组,收集当前年度的所有Ticker
  group_by(Year) %>%
  mutate(current_tickers = list(unique(Ticker))) %>%
  ungroup() %>%
  # 获取上一年度的Ticker集合,计算两个哑变量
  mutate(prev_year_tickers = lag(current_tickers),
         # 哑变量I:当前Ticker未出现在上一年度,第一年默认0
         I = ifelse(Year == min(Year), 0, !Ticker %in% unlist(prev_year_tickers)) %>% as.integer(),
         # 哑变量A:当前年度是该Ticker首次出现的年度
         A = as.integer(Year == first_year)) %>%
  # 移除中间辅助列
  select(-first_year, -current_tickers, -prev_year_tickers)

步骤3:查看结果

print(b)

运行后输出与预期一致:

Ticker Year I A
1     AA 2009 0 0
2     AA 2010 0 0
3    BBX 2010 1 1
4     AA 2011 0 0
5  AAAAX 2011 1 1
6    BBX 2011 0 0

逻辑说明

  • 哑变量A:通过分组定位每个Ticker的首次出现年份,当行对应年度等于首次年份时标记为1,代表该Ticker从未在之前任何年度出现过。
  • 哑变量I:利用lag()获取上一年度的Ticker集合,判断当前Ticker是否不在该集合中(第一年无上年数据,默认标记0),满足条件则标记为1,代表相较于上一年是新增记录。

内容的提问来源于stack exchange,提问作者Jane

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 21:25:21