我想在R中使用dplyr创建一个新变量 这是数据-
year TICKER auditor_fkey pauditor_fkey AUDTURNOVER
1 2001 AIR 4 NA NA
2 2002 AIR 4 4 0
3 2003 AIR 4 4 0
4 2004 AIR 4 4 0
5 2005 AIR 4 4 0
6 2006 AIR 4 4 0
7 2007 AIR 4 4 0
8 2008 AIR 4 4 0
9 2009 AIR 4 4 0
10 2010 AIR 4 4 0
11 2011 AIR 4 4 0
12 2012 AIR 4 4 0
13 2013 AIR 4 4 0
14 2014 AIR 4 4 0
15 2015 AIR 4 4 0
16 2016 AIR 4 4 0
17 2017 AIR 4 4 0
18 2000 ABT 5 NA NA
19 2001 ABT 5 5 0
20 2002 ABT 3 5 1
21 2003 ABT 3 3 0
22 2004 ABT 3 3 0
23 2005 ABT 3 3 0
24 2006 ABT 3 3 0
25 2007 ABT 3 3 0
26 2008 ABT 3 3 0
27 2009 ABT 3 3 0
28 2010 ABT 3 3 0
29 2011 ABT 3 3 0
30 2012 ABT 3 3 0
31 2013 ABT 3 3 0
32 2014 ABT 2 3 1
33 2015 ABT 2 2 0
34 2016 ABT 2 2 0
35 2017 ABT 2 2 0
我使用以下代码创建了“ pauditor_fkey”变量
my_data <- my_data%>%
group_by(TICKER) %>%
mutate(pauditor_fkey = lag (auditor_fkey))
这里,年份=一年; TICKER =公司的标识符; audit_fkey =标识在一年内对公司进行过审计的审计师(例如,“ 2001”中的审计师“ 4”被审计公司“ AIR”); pauditor_fkey =上一年的审计师; AUDTURNOVER =如果在特定年份中,审计师发生了变化我将它们编码为1,否则为0。 现在,我要使用上述变量创建一个名为 AUDITOR_TENURE 的新变量 运行代码后,数据应如下所示-
year TICKER auditor_fkey pauditor_fkey AUDTURNOVER AUDITOR_TENURE
1 2001 AIR 4 NA NA 1
2 2002 AIR 4 4 0 2
3 2003 AIR 4 4 0 3
4 2004 AIR 4 4 0 4
5 2005 AIR 4 4 0 5
6 2006 AIR 4 4 0 6
7 2007 AIR 4 4 0 7
8 2008 AIR 4 4 0 8
9 2009 AIR 4 4 0 9
10 2010 AIR 4 4 0 10
11 2011 AIR 4 4 0 11
12 2012 AIR 4 4 0 12
13 2013 AIR 4 4 0 13
14 2014 AIR 4 4 0 14
15 2015 AIR 4 4 0 15
16 2016 AIR 4 4 0 16
17 2017 AIR 4 4 0 17
18 2000 ABT 5 NA NA 1
19 2001 ABT 5 5 0 2
20 2002 ABT 3 5 1 1
21 2003 ABT 3 3 0 2
22 2004 ABT 3 3 0 3
23 2005 ABT 3 3 0 4
24 2006 ABT 3 3 0 5
25 2007 ABT 3 3 0 6
26 2008 ABT 3 3 0 7
27 2009 ABT 3 3 0 8
28 2010 ABT 3 3 0 9
29 2011 ABT 3 3 0 10
30 2012 ABT 3 3 0 11
31 2013 ABT 3 3 0 12
32 2014 ABT 2 3 1 1
33 2015 ABT 2 2 0 2
34 2016 ABT 2 2 0 3
35 2017 ABT 2 2 0 4
如果检查了AUDITOR_TENURE变量,则可以看出对于TICKER == AIR,审核器没有变化;因此,AUDITOR_TENURE增加。对于TICKER == ABT,可以看出在2000年和2001年,审计师没有任何变动。因此该审计员在当年的AUDITOR_TENURE分别为1和2。但是,在2002年,ABT的审核员发生了变化,该审核员将继续工作到2013年,因此将为他们生成AUDITOR_TENURE变量的新编号。然后在2015年,他们再次更换审核员,审核员继续工作至2017年,并据此计算其任期。
我使用了以下代码-
my_data <- my_data %>%
group_by(TICKER, group = rleid(auditor_fkey)) %>%
mutate(AUDITOR_TENURE = row_number()) %>%
ungroup()
或者,这个-
my_data <- my_data %>%
group_by(TICKER, group = cumsum(auditor_fkey !=
lag(auditor_fkey, default = first(auditor_fkey)))) %>%
mutate(AUDITOR_TENURE = row_number()) %>%
ungroup()
对于这两种情况,我都得到了这些结果-这是不正确的。
year TICKER auditor_fkey AUDTURNOVER group AUDITOR_TENURE
1 2001 AIR 4 NA 3 1
2 2002 AIR 4 0 6 1
3 2003 AIR 4 0 9 1
4 2004 AIR 4 0 12 1
5 2005 AIR 4 0 15 1
6 2006 AIR 4 0 18 1
7 2007 AIR 4 0 21 1
8 2008 AIR 4 0 24 1
9 2009 AIR 4 0 28 1
10 2010 AIR 4 0 32 1
11 2011 AIR 4 0 35 1
12 2012 AIR 4 0 38 1
13 2013 AIR 4 0 41 1
14 2014 AIR 4 0 44 1
15 2015 AIR 4 0 47 1
16 2016 AIR 4 0 50 1
17 2017 AIR 4 0 53 1
18 2000 ABT 5 NA 1 1
19 2001 ABT 5 0 4 1
20 2002 ABT 3 1 7 1
21 2003 ABT 3 0 10 1
22 2004 ABT 3 0 13 1
23 2005 ABT 3 0 16 1
24 2006 ABT 3 0 19 1
25 2007 ABT 3 0 22 1
26 2008 ABT 3 0 25 1
27 2009 ABT 3 0 29 1
28 2010 ABT 3 0 33 1
29 2011 ABT 3 0 36 1
30 2012 ABT 3 0 39 1
31 2013 ABT 3 0 42 1
32 2014 ABT 2 1 45 1
33 2015 ABT 2 0 48 1
34 2016 ABT 2 0 51 1
35 2017 ABT 2 0 54 1
答案 0 :(得分:0)
使用data.table
,它将只是DT[, AUDITOR_TENURE := rowid(TICKER, auditor_fkey)]