我有以下数据:
ID month year
1 2 2002
1 1 2003
1 3 2003
2 2 2017
2 2 2017
3 1 2012
3 1 2002
3 2 2014
3 2 2014
4 1 2003
5 2 2002
5 5 2015
我想创建以下虚拟变量:
ID month year 1st 2nd 3rd
1 2 2002 1 0 0
1 1 2003 0 1 0
1 3 2003 0 0 1
2 2 2017 1 0 0
2 2 2017 1 0 0
3 1 2012 1 0 0
3 1 2002 1 0 0
3 2 2014 0 1 0
3 2 2014 0 1 0
4 1 2003 1 0 0
5 2 2002 1 0 0
5 5 2015 0 1 0
除了五列(第1,第2,第3,第4,第5)
进展:
我将日期细节合并为一个,并使用以下函数
df$newcolumn <- ave(df$ID, df$date, FUN=seq_along)
,然后根据计数器为每个函数生成一个虚拟变量。但是,此函数将重复日期计为唯一,我不想要。
注意:有数千个数据点和ID
我为其他需要它的人找到了解决方案:
df$obs <- with(df, ave(df$date, df$ID, FUN=function(x) cumsum(!duplicated(x))))
它创建了一个计数,我只是创建了该计数的虚拟列