r - 如何有条件地选择/过滤R中每个组中的值

标签 r dplyr

我有一个数据框,我想在其中按 Name 和 Acquired 对变量进行分组,但只选择包含位置为 10 的组。

这是我的数据框的一个例子。

           Name           Acquired       Position   Salary
1         Adam Dunn*      Amateur Draft        7   250000
2         Adam Dunn*      Amateur Draft        7   400000
3         Adam Dunn*      Amateur Draft        7   445000
4         Adam Dunn*      Amateur Draft        7  4600000
5         Adam Dunn*      Amateur Draft        7  7500000
6         Adam Dunn*      Amateur Draft        7 10500000
7         Adam Dunn*      Amateur Draft        7 13000000
8         Adam Dunn*        Free Agency        3  8000000
9         Adam Dunn*        Free Agency        3 12000000
10        Adam Dunn*        Free Agency       10 12000000
11        Adam Dunn*        Free Agency       10 14000000
12        Adam Dunn*        Free Agency       10 15000000
13        Adam Dunn*        Free Agency       10 15000000
14     Adam LaRoche*      Amateur Draft        3   300000
15     Adam LaRoche*      Amateur Draft        3   300000
16     Adam LaRoche*      Amateur Draft        3   337500
17     Adam LaRoche*      Amateur Draft        3   337500
18     Adam LaRoche*      Amateur Draft        3   420000
19     Adam LaRoche*      Amateur Draft        3   420000
20     Adam LaRoche*             Traded        3  3200000
21     Adam LaRoche*             Traded        3  5000000
22     Adam LaRoche*             Traded        3  7050000
23     Adam LaRoche*        Free Agency        3  4500000
24     Adam LaRoche*        Free Agency        3  7000000
25     Adam LaRoche*        Free Agency        3  8000000
26     Adam LaRoche*        Free Agency        3 10000000
27     Adam LaRoche*        Free Agency        3 12000000
28     Adam LaRoche*        Free Agency       10 12000000
29        Adam Lind*      Amateur Draft       10   411800
30        Adam Lind*      Amateur Draft       10   550000
31        Adam Lind*      Amateur Draft        3  5150000
32        Adam Lind*      Amateur Draft        3  5000000
33        Adam Lind*      Amateur Draft        3  5000000
34        Adam Lind*      Amateur Draft        3  7000000
35        Adam Lind*             Traded        3  7500000
36  Adrian Gonzalez*             Traded       10   316000
37  Adrian Gonzalez*             Traded        3   327500
38  Adrian Gonzalez*             Traded        3   500000
39  Adrian Gonzalez*             Traded        3   875000
40  Adrian Gonzalez*             Traded        3  3125000
41  Adrian Gonzalez*             Traded        3  4875000
42  Adrian Gonzalez*             Traded        3  6300000
43  Adrian Gonzalez*             Traded        3 21000000
44  Adrian Gonzalez*             Traded        3 21000000
45  Adrian Gonzalez*             Traded        3 21000000
46  Adrian Gonzalez*             Traded        3 21857000
47    Alan Bannister             Traded       10   350000
48      Albert Belle      Amateur Draft        9    68000
49      Albert Belle      Amateur Draft       10   117000
50      Albert Belle      Amateur Draft        7   130000
51      Albert Belle      Amateur Draft       10   175000
52      Albert Belle      Amateur Draft        7  1675000
53      Albert Belle      Amateur Draft        7  2775000
54      Albert Belle      Amateur Draft        7  4500000
55      Albert Belle      Amateur Draft        7  5700000
56      Albert Belle        Free Agency        7 10000000
57      Albert Belle        Free Agency        7 10000000
58     Albert Pujols      Amateur Draft        5   200000
59     Albert Pujols      Amateur Draft        7   600000
60     Albert Pujols      Amateur Draft        7   900000
61     Albert Pujols      Amateur Draft        3  7000000
62     Albert Pujols      Amateur Draft        3 11000000
63     Albert Pujols      Amateur Draft        3 14000000
64     Albert Pujols      Amateur Draft        3 12937813
65     Albert Pujols      Amateur Draft        3 13870949
66     Albert Pujols      Amateur Draft        3 14427326
67     Albert Pujols      Amateur Draft        3 14595953
68     Albert Pujols      Amateur Draft        3 14508395
69     Albert Pujols        Free Agency        3 12000000
70     Albert Pujols        Free Agency       10 16000000
71     Albert Pujols        Free Agency        3 23000000
72     Albert Pujols        Free Agency        3 24000000
73    Alex Rodriguez      Amateur Draft        6   442333
74    Alex Rodriguez      Amateur Draft        6   442333
75    Alex Rodriguez      Amateur Draft        6   442334
76    Alex Rodriguez      Amateur Draft        6  1062500
77    Alex Rodriguez      Amateur Draft        6  2162500
78    Alex Rodriguez      Amateur Draft        6  3112500
79    Alex Rodriguez      Amateur Draft        6  4362500
80    Alex Rodriguez        Free Agency        6 22000000
81    Alex Rodriguez        Free Agency        6 22000000
82    Alex Rodriguez        Free Agency        6 22000000
83    Alex Rodriguez             Traded        5 22000000
84    Alex Rodriguez             Traded        5 26000000
85    Alex Rodriguez             Traded        5 21680727
86    Alex Rodriguez        Free Agency        5 22708525
87    Alex Rodriguez        Free Agency        5 28000000
88    Alex Rodriguez        Free Agency        5 33000000
89    Alex Rodriguez        Free Agency        5 33000000
90    Alex Rodriguez        Free Agency        5 32000000
91    Alex Rodriguez        Free Agency        5 29000000
92    Alex Rodriguez        Free Agency        5 28000000
93    Alex Rodriguez             Traded       10 22000000
94   Alexi Amarista* Amateur Free Agent       10   481000
95   Alexi Amarista*             Traded        8   497400
96   Alexi Amarista*             Traded        6   511100
97   Alexi Amarista*             Traded        6  1150000
98       Allen Craig      Amateur Draft        9   400000
99       Allen Craig      Amateur Draft        7   414000
100      Allen Craig      Amateur Draft        3   495000

输出应该是这样的:
           Name           Acquired       Position   Salary
8         Adam Dunn*        Free Agency        3  8000000
9         Adam Dunn*        Free Agency        3 12000000
10        Adam Dunn*        Free Agency       10 12000000
11        Adam Dunn*        Free Agency       10 14000000
12        Adam Dunn*        Free Agency       10 15000000
13        Adam Dunn*        Free Agency       10 15000000
23     Adam LaRoche*        Free Agency        3  4500000
24     Adam LaRoche*        Free Agency        3  7000000
25     Adam LaRoche*        Free Agency        3  8000000
26     Adam LaRoche*        Free Agency        3 10000000
27     Adam LaRoche*        Free Agency        3 12000000
28     Adam LaRoche*        Free Agency       10 12000000
29        Adam Lind*      Amateur Draft       10   411800
30        Adam Lind*      Amateur Draft       10   550000
31        Adam Lind*      Amateur Draft        3  5150000
32        Adam Lind*      Amateur Draft        3  5000000
33        Adam Lind*      Amateur Draft        3  5000000
34        Adam Lind*      Amateur Draft        3  7000000
35        Adam Lind*             Traded        3  7500000
36  Adrian Gonzalez*             Traded       10   316000
37  Adrian Gonzalez*             Traded        3   327500
38  Adrian Gonzalez*             Traded        3   500000
39  Adrian Gonzalez*             Traded        3   875000
40  Adrian Gonzalez*             Traded        3  3125000
41  Adrian Gonzalez*             Traded        3  4875000
42  Adrian Gonzalez*             Traded        3  6300000
43  Adrian Gonzalez*             Traded        3 21000000
44  Adrian Gonzalez*             Traded        3 21000000
45  Adrian Gonzalez*             Traded        3 21000000
46  Adrian Gonzalez*             Traded        3 21857000
47    Alan Bannister             Traded       10   350000
48      Albert Belle      Amateur Draft        9    68000
49      Albert Belle      Amateur Draft       10   117000
50      Albert Belle      Amateur Draft        7   130000
51      Albert Belle      Amateur Draft       10   175000
52      Albert Belle      Amateur Draft        7  1675000
53      Albert Belle      Amateur Draft        7  2775000
54      Albert Belle      Amateur Draft        7  4500000
55      Albert Belle      Amateur Draft        7  5700000
69     Albert Pujols        Free Agency        3 12000000
70     Albert Pujols        Free Agency       10 16000000
71     Albert Pujols        Free Agency        3 23000000
72     Albert Pujols        Free Agency        3 24000000
93    Alex Rodriguez             Traded       10 22000000
94   Alexi Amarista* Amateur Free Agent       10   481000

基本上,如果我只想按组选择位置 10,我只会进行子集化,或者编写以下代码:
library(dplyr)

df_1 <- df %>% group_by(Name, Acquired) %>% filter(Position == 10) %>% as.data.frame()

我想保留每个包含 10 的组,并过滤​​掉所有没有的组。所以,Amateur Draft 收购的 Adam Dunn 已经出局,但 Adam Dunn Free Agency 还在。我怀疑这会涉及某种条件过滤,但我不确定它是什么。

最佳答案

为了过滤组,一种选择是为每个组返回一个唯一的 bool 值,然后由于广播将用于选择整个组;对于您的情况,请包装 any周围的条件应该工作:

df %>% group_by(Name, Acquired) %>% filter(any(Position == 10)) %>% as.data.frame()

关于r - 如何有条件地选择/过滤R中每个组中的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41539560/

相关文章:

r - 当函数采用不同列的多个参数时使用 dplyr mutate_at

r - 对 R 中数据帧的两个不同列执行 MAD 计算

r - 使用 dplyr : Within groups, 选择第一个满足条件的值

oop - 将 RInside 的 'R' 实例作为类/方法之间的参数传递

使用 dplyr 按行位置引用值

r - 如何使用 dplyr::select_if 选择非数字列

删除特定字符串和之后的任何内容

r - 使用 fill 参数保持 geom_bar 中变量的顺序相同

r - dplyr : Trying to access the elements of a vector stored in a column using an exterior variable as index

r - 使用 group_by 选择 dplyr 中所有先前的分组级别