R 数据帧筛选器值

R 数据帧筛选器值,r,R,假设我有下一个数据帧 table<-data.frame(group=c(0,5,10,15,20,25,30,35,40,0,5,10,15,20,25,30,35,40,0,5,10,15,20,25,30,35,40),plan=c(1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3),price=c(1,4,5,6,8,9,12,12,12,3,5,6,7,10,12,20,20,20,5,6,8,12,15,20,22,28

假设我有下一个数据帧

table<-data.frame(group=c(0,5,10,15,20,25,30,35,40,0,5,10,15,20,25,30,35,40,0,5,10,15,20,25,30,35,40),plan=c(1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3),price=c(1,4,5,6,8,9,12,12,12,3,5,6,7,10,12,20,20,20,5,6,8,12,15,20,22,28,28))

   group plan price
1      0    1     1
2      5    1     4
3     10    1     5
4     15    1     6
5     20    1     8
6     25    1     9
7     30    1    12
8     35    1    12
9     40    1    12
10     0    2     3
11     5    2     5
12    10    2     6
13    15    2     7
14    20    2    10
15    25    2    12
16    30    2    20
17    35    2    20
18    40    2    20

您可以在
dplyr
中使用
slice

library(dplyr)

table %>%
  group_by(plan) %>%
  slice(1:which.max(price == max(price))) 
which.max
给出了第一次出现的
price==max(price)
的索引。使用它,我可以
切片
data.frame,只为每个
计划
保留行,直到最高价格

结果:

# A tibble: 22 x 3
# Groups:   plan [3]
   group  plan price
   <dbl> <dbl> <dbl>
 1     0     1     1
 2     5     1     4
 3    10     1     5
 4    15     1     6
 5    20     1     8
 6    25     1     9
 7    30     1    12
 8     0     2     3
 9     5     2     5
10    10     2     6
# ... with 12 more rows
#一个tible:22 x 3
#分组:计划[3]
团体计划价格
1     0     1     1
2     5     1     4
3    10     1     5
4    15     1     6
5    20     1     8
6    25     1     9
7    30     1    12
8     0     2     3
9     5     2     5
10    10     2     6
# ... 还有12排

您可以在
dplyr
中使用
slice

library(dplyr)

table %>%
  group_by(plan) %>%
  slice(1:which.max(price == max(price))) 
which.max
给出了第一次出现的
price==max(price)
的索引。使用它,我可以
切片
data.frame,只为每个
计划
保留行,直到最高价格

结果:

# A tibble: 22 x 3
# Groups:   plan [3]
   group  plan price
   <dbl> <dbl> <dbl>
 1     0     1     1
 2     5     1     4
 3    10     1     5
 4    15     1     6
 5    20     1     8
 6    25     1     9
 7    30     1    12
 8     0     2     3
 9     5     2     5
10    10     2     6
# ... with 12 more rows
#一个tible:22 x 3
#分组:计划[3]
团体计划价格
1     0     1     1
2     5     1     4
3    10     1     5
4    15     1     6
5    20     1     8
6    25     1     9
7    30     1    12
8     0     2     3
9     5     2     5
10    10     2     6
# ... 还有12排

dplyr::group_by(表、计划、价格)%%>%dplyr::slice(1),没有“最高价格”字样。有什么我遗漏的吗?@r2evans对于这个特定的例子,它是有效的。但假设每个
计划中都有重复的价格,而不是最高价格。您的代码不会给出所需的结果。虽然也不清楚OP是否希望保留非最大值的副本,或者价格是否会被取消排序。我想我推断的太多了,这是好的观点。你所做的只是
dplyr::group_by(table,plan,price)%%>%dplyr::slice(1)
,没有“最大价格”。有什么我遗漏的吗?@r2evans对于这个特定的例子,它是有效的。但假设每个
计划中都有重复的价格,而不是最高价格。您的代码不会给出所需的结果。虽然也不清楚OP是否希望保留不超过最大值的副本,或者价格是否会被取消排序。我想我推断得太多了,这是一个很好的观点。