我想在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
36 2007 WDDD 598 NA 0
37 2008 WDDD 598 598 0
38 2009 WDDD 598 598 0
39 2010 WDDD 598 598 0
40 2011 WDDD 598 598 0
41 2012 WDDD 598 598 0
42 2013 WDDD 598 598 0
43 2014 WDDD 598 598 0
44 2015 WDDD 27105 598 1
45 2016 WDDD 27105 27105 0
46 2017 WDDD 27105 27105 0
47 2001 ACET 4 NA NA
48 2002 ACET 4 4 0
49 2003 ACET 4 4 0
50 2004 ACET 4 4 0
51 2005 ACET 4 4 0
52 2006 ACET 7 4 1
53 2007 ACET 7 7 0
54 2008 ACET 7 7 0
55 2009 ACET 7 7 0
56 2010 ACET 11761 7 1
57 2011 ACET 11761 11761 0
58 2012 ACET 11761 11761 0
59 2013 ACET 11761 11761 0
60 2014 ACET 11761 11761 0
61 2015 ACET 11761 11761 0
62 2016 ACET 11761 11761 0
63 2017 ACET 11761 11761 0
64 2000 ACU 2 NA NA
65 2001 ACU 2 2 0
66 2002 ACU 2 2 0
67 2003 ACU 2 2 0
68 2004 ACU 2 2 0
69 2005 ACU 2 2 0
70 2006 ACU 2 2 0
71 2007 ACU 2 2 0
72 2008 ACU 1687 2 1
73 2008 ACU 2 1687 1
74 2009 ACU 1687 2 1
75 2010 ACU 8256 1687 1
76 2011 ACU 8256 8256 0
77 2012 ACU 8256 8256 0
78 2013 ACU 8256 8256 0
79 2014 ACU 8256 8256 0
80 2015 ACU 8256 8256 0
81 2016 ACU 8256 8256 0
82 2017 ACU 8256 8256 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
36 2007 WDDD 598 NA 0 1
37 2008 WDDD 598 598 0 2
38 2009 WDDD 598 598 0 3
39 2010 WDDD 598 598 0 4
40 2011 WDDD 598 598 0 5
41 2012 WDDD 598 598 0 6
42 2013 WDDD 598 598 0 7
43 2014 WDDD 598 598 0 8
44 2015 WDDD 27105 598 1 1
45 2016 WDDD 27105 27105 0 2
46 2017 WDDD 27105 27105 0 3
47 2001 ACET 4 NA NA 1
48 2002 ACET 4 4 0 2
49 2003 ACET 4 4 0 3
50 2004 ACET 4 4 0 4
51 2005 ACET 4 4 0 5
52 2006 ACET 7 4 1 1
53 2007 ACET 7 7 0 2
54 2008 ACET 7 7 0 3
55 2009 ACET 7 7 0 4
56 2010 ACET 11761 7 1 1
57 2011 ACET 11761 11761 0 2
58 2012 ACET 11761 11761 0 3
59 2013 ACET 11761 11761 0 4
60 2014 ACET 11761 11761 0 5
61 2015 ACET 11761 11761 0 6
62 2016 ACET 11761 11761 0 7
63 2017 ACET 11761 11761 0 8
64 2000 ACU 2 NA NA 1
65 2001 ACU 2 2 0 2
66 2002 ACU 2 2 0 3
67 2003 ACU 2 2 0 4
68 2004 ACU 2 2 0 5
69 2005 ACU 2 2 0 6
70 2006 ACU 2 2 0 7
71 2007 ACU 2 2 0 8
72 2008 ACU 1687 2 1 1
73 2008 ACU 2 1687 1 1
74 2009 ACU 1687 2 1 1
75 2010 ACU 8256 1687 1 1
76 2011 ACU 8256 8256 0 2
77 2012 ACU 8256 8256 0 3
78 2013 ACU 8256 8256 0 4
79 2014 ACU 8256 8256 0 5
80 2015 ACU 8256 8256 0 6
81 2016 ACU 8256 8256 0 7
82 2017 ACU 8256 8256 0 8
如果检查了 AUDITOR_TENURE 变量,则会发现 对于TICKER == AIR,审核员没有任何变化;因此, AUDITOR_TENURE 增加。对于TICKER == ABT,可以看出在2000年和2001年,审计师没有任何变动。因此该审计师的当年 AUDITOR_TENURE 分别为1和2。但是,在2002年,ABT的审核员发生了变化,该审核员将继续工作到2013年,因此为他们生成了 AUDITOR_TENURE 变量的新编号。然后在2015年,他们再次更换审核员,审核员继续工作至2017年,并据此计算其任期。
我实际上正在寻找用于此问题的R代码。
感谢您的帮助。
答案 0 :(得分:0)
我们可以TICKER
auditor_fkey
和row_number()
并将library(dplyr)
library(data.table)
my_data %>%
group_by(TICKER, group = rleid(auditor_fkey)) %>%
mutate(AUDITOR_TENURE = row_number()) %>%
ungroup() %>%
select(-group)
# year TICKER auditor_fkey pauditor_fkey AUDTURNOVER AUDITOR_TENURE
# <int> <fct> <int> <int> <int> <int>
# 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
# … with 72 more rows
分配给每个组
dplyr
仅使用lag
,我们可以使用df %>%
group_by(TICKER, group = cumsum(auditor_fkey !=
lag(auditor_fkey, default = first(auditor_fkey)))) %>%
mutate(AUDITOR_TENURE = row_number()) %>%
ungroup() %>%
select(-group)
class DynamicDictionaryWrapper : DynamicObject
{
protected readonly Dictionary<string,object> _source;
public DynamicDictionaryWrapper(Dictionary<string,object> source)
{
_source = source;
}
public override bool TryGetMember(GetMemberBinder binder, out object result)
{
result = null;
return (_source.TryGetValue(binder.Name, out result));
}
}