在R中使用dplyr创建新变量

时间:2019-06-16 23:34:58

标签: r dplyr

我想在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代码。

感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

我们可以TICKER auditor_fkeyrow_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));
    }
}