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是否希望保留不超过最大值的副本,或者价格是否会被取消排序。我想我推断得太多了,这是一个很好的观点。