根据多列和R中条目的顺序删除行
delete rows based on multiple columns and order of entries in R
gvkey
= 公司编号
我创建了一个名为 df
的数据框
executive_id gvkey year
1 5623 1004 2004
2 5625 1004 2004
3 5626 1004 2004
4 24312 1004 2004
5 28074 1004 2004
6 5623 1004 2005
7 5625 1004 2005
8 5626 1004 2005
9 24312 1004 2005
10 28074 1004 2005
11 5623 1004 2006
12 5625 1004 2006
13 5626 1004 2006
14 24312 1004 2006
15 28074 1004 2006
16 5623 1004 2007
17 5625 1004 2007
18 5626 1004 2007
19 24312 1004 2007
20 35684 1004 2007
21 5623 1004 2008
22 5626 1004 2008
23 24312 1004 2008
24 35684 1004 2008
25 38212 1004 2008
26 5623 1004 2009
27 5626 1004 2009
28 24312 1004 2009
29 35684 1004 2009
30 38212 1004 2009
31 5623 1004 2010
32 5626 1004 2010
33 35684 1004 2010
34 38212 1004 2010
35 44350 1004 2010
36 5623 1004 2011
37 5626 1004 2011
38 35684 1004 2011
39 38212 1004 2011
40 44350 1004 2011
41 8741 1013 2004
42 24949 1013 2004
43 26620 1013 2004
44 26621 1013 2004
45 28315 1013 2004
46 28316 1013 2004
47 28317 1013 2004
48 32048 1013 2004
49 32049 1013 2004
50 8741 1013 2005
51 24949 1013 2005
52 26620 1013 2005
53 26621 1013 2005
54 28315 1013 2005
55 32048 1013 2005
56 32049 1013 2005
57 8741 1013 2006
58 26621 1013 2006
59 28315 1013 2006
60 32048 1013 2006
61 32049 1013 2006
62 8741 1013 2007
63 26621 1013 2007
64 28315 1013 2007
65 32048 1013 2007
66 32049 1013 2007
67 33885 1013 2007
68 33886 1013 2007
69 8741 1013 2008
70 26621 1013 2008
71 32048 1013 2008
72 32049 1013 2008
73 33885 1013 2008
74 33886 1013 2008
75 43043 1013 2008
76 8741 1013 2009
77 26621 1013 2009
78 32048 1013 2009
79 32049 1013 2009
80 33885 1013 2009
81 33886 1013 2009
82 43043 1013 2009
83 8741 1013 2010
84 26621 1013 2010
85 32049 1013 2010
86 33885 1013 2010
87 43043 1013 2010
...
这就是我要根据以下逻辑删除 df
的某些列的方式:
拼写逻辑:
对于每个 year
,删除所有 executive_id
,每个 year
的第一个 exectuive_id
条目除外
决赛 df
:
executive_id gvkey year
1 5623 1004 2004
6 5623 1004 2005
11 5623 1004 2006
16 5623 1004 2007
21 5623 1004 2008
26 5623 1004 2009
31 5623 1004 2010
36 5623 1004 2011
41 8741 1013 2004
50 8741 1013 2005
57 8741 1013 2006
62 8741 1013 2007
69 8741 1013 2008
76 8741 1013 2009
83 8741 1013 2010
...
补充问题:
如果我有两个没有重复的附加列,代码应该是什么样子?
year gvkey executive_id compensation compensation_change
1 2004 1004 5623 1287. 11.2
2 2004 1004 5625 417. 7.47
3 2004 1004 5626 550. 4.48
4 2004 1004 24312 499. 65.9
5 2004 1004 28074 549. 5.53
6 2005 1004 5623 1758. 36.5
7 2005 1004 5625 457. 9.46
8 2005 1004 5626 666. 21.1
9 2005 1004 24312 711. 42.4
10 2005 1004 28074 581. 5.71
...
非常感谢!!!
我想你想要的可能是下面这样的东西,使用 duplicated()
:
df[!duplicated(df[,c("year","gvkey")]),]
这样
> df[!duplicated(df[-1]),]
executive_id gvkey year
1 5623 1004 2004
6 5623 1004 2005
11 5623 1004 2006
16 5623 1004 2007
21 5623 1004 2008
26 5623 1004 2009
31 5623 1004 2010
36 5623 1004 2011
41 8741 1013 2004
50 8741 1013 2005
57 8741 1013 2006
62 8741 1013 2007
69 8741 1013 2008
76 8741 1013 2009
83 8741 1013 2010
gvkey
= 公司编号
我创建了一个名为 df
executive_id gvkey year
1 5623 1004 2004
2 5625 1004 2004
3 5626 1004 2004
4 24312 1004 2004
5 28074 1004 2004
6 5623 1004 2005
7 5625 1004 2005
8 5626 1004 2005
9 24312 1004 2005
10 28074 1004 2005
11 5623 1004 2006
12 5625 1004 2006
13 5626 1004 2006
14 24312 1004 2006
15 28074 1004 2006
16 5623 1004 2007
17 5625 1004 2007
18 5626 1004 2007
19 24312 1004 2007
20 35684 1004 2007
21 5623 1004 2008
22 5626 1004 2008
23 24312 1004 2008
24 35684 1004 2008
25 38212 1004 2008
26 5623 1004 2009
27 5626 1004 2009
28 24312 1004 2009
29 35684 1004 2009
30 38212 1004 2009
31 5623 1004 2010
32 5626 1004 2010
33 35684 1004 2010
34 38212 1004 2010
35 44350 1004 2010
36 5623 1004 2011
37 5626 1004 2011
38 35684 1004 2011
39 38212 1004 2011
40 44350 1004 2011
41 8741 1013 2004
42 24949 1013 2004
43 26620 1013 2004
44 26621 1013 2004
45 28315 1013 2004
46 28316 1013 2004
47 28317 1013 2004
48 32048 1013 2004
49 32049 1013 2004
50 8741 1013 2005
51 24949 1013 2005
52 26620 1013 2005
53 26621 1013 2005
54 28315 1013 2005
55 32048 1013 2005
56 32049 1013 2005
57 8741 1013 2006
58 26621 1013 2006
59 28315 1013 2006
60 32048 1013 2006
61 32049 1013 2006
62 8741 1013 2007
63 26621 1013 2007
64 28315 1013 2007
65 32048 1013 2007
66 32049 1013 2007
67 33885 1013 2007
68 33886 1013 2007
69 8741 1013 2008
70 26621 1013 2008
71 32048 1013 2008
72 32049 1013 2008
73 33885 1013 2008
74 33886 1013 2008
75 43043 1013 2008
76 8741 1013 2009
77 26621 1013 2009
78 32048 1013 2009
79 32049 1013 2009
80 33885 1013 2009
81 33886 1013 2009
82 43043 1013 2009
83 8741 1013 2010
84 26621 1013 2010
85 32049 1013 2010
86 33885 1013 2010
87 43043 1013 2010
...
这就是我要根据以下逻辑删除 df
的某些列的方式:
拼写逻辑:
对于每个 year
,删除所有 executive_id
,每个 year
exectuive_id
条目除外
决赛 df
:
executive_id gvkey year
1 5623 1004 2004
6 5623 1004 2005
11 5623 1004 2006
16 5623 1004 2007
21 5623 1004 2008
26 5623 1004 2009
31 5623 1004 2010
36 5623 1004 2011
41 8741 1013 2004
50 8741 1013 2005
57 8741 1013 2006
62 8741 1013 2007
69 8741 1013 2008
76 8741 1013 2009
83 8741 1013 2010
...
补充问题:
如果我有两个没有重复的附加列,代码应该是什么样子?
year gvkey executive_id compensation compensation_change
1 2004 1004 5623 1287. 11.2
2 2004 1004 5625 417. 7.47
3 2004 1004 5626 550. 4.48
4 2004 1004 24312 499. 65.9
5 2004 1004 28074 549. 5.53
6 2005 1004 5623 1758. 36.5
7 2005 1004 5625 457. 9.46
8 2005 1004 5626 666. 21.1
9 2005 1004 24312 711. 42.4
10 2005 1004 28074 581. 5.71
...
非常感谢!!!
我想你想要的可能是下面这样的东西,使用 duplicated()
:
df[!duplicated(df[,c("year","gvkey")]),]
这样
> df[!duplicated(df[-1]),]
executive_id gvkey year
1 5623 1004 2004
6 5623 1004 2005
11 5623 1004 2006
16 5623 1004 2007
21 5623 1004 2008
26 5623 1004 2009
31 5623 1004 2010
36 5623 1004 2011
41 8741 1013 2004
50 8741 1013 2005
57 8741 1013 2006
62 8741 1013 2007
69 8741 1013 2008
76 8741 1013 2009
83 8741 1013 2010