如何在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
相关产品推荐
相关产品推荐

