您好,我想确定与上一年的数据相比,哪一行是添加/删除的。这是数据框。
a <- data.frame(Ticker=c("AA","AA","BBX","AA","AAAAX","BBX"), Year=c(2009,2010,2010,2011,2011,2011))
如果上一年没有显示股票代码,我想创建一个虚拟变量 I=1。如果前几年没有显示 Ticker,我想创建另一个虚拟变量 A=1。在这个样本中,只有两年。但实际数据中,总共有10年左右。预期输出如下,
b <- data.frame(Ticker=c("AA","AA","BBX","AA","AAAAX","BBX"), Year=c(2009,2010,2010,2011,2011,2011),I=c(0,0,1,0,1,0),A=c(0,0,1,0,1,0))
谢谢!
最佳答案
data.table版本基于自连接,只是为了好玩。
代码设置 A
和I
标记为 1
,然后将行更改为 0
当上一年或任何上一年与 Ticker
匹配时:
我正在加入a
数据集,通过 data.table 语法返回自身 a[a]
(table[jointable]
),加入on=
Ticker
值,并比较 Year
每个匹配中的 s Ticker
组。
当有匹配时,I
或A
值被覆盖:=
与 0
library(data.table)
setDT(a)
a[, c("A","I","Yearp1") := .(1, 1, Year - 1)]
a[a, on=.(Ticker, Yearp1 = Year), I := 0]
a[a, on=.(Ticker, Year > Year), A := 0]
a[, Yearp1 := NULL]
a
# Ticker Year A I
#1: AA 2009 1 1
#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
关于r - 如何在R中识别跨年的添加/删除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73614762/