首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >我如何group_by,总结,然后选择最小和最大?

我如何group_by,总结,然后选择最小和最大?
EN

Stack Overflow用户
提问于 2019-06-18 20:02:38
回答 1查看 51关注 0票数 1
代码语言:javascript
运行
复制
         Fx       claim_x
1      0.00       0
2      0.05       0
3      0.06       0
4      0.10       0
5      0.30       0
6      0.35     100
7      0.50     350
8      0.60     350
9      0.70     850
10     0.79    2350
11     0.90    4850
12     1.00    4850

以上是数据框架。如果我想要group_by claim_x并选择Fx的最小值,我会这样做:

代码语言:javascript
运行
复制
min <- df %>% dplyr::group_by(claim_x) %>% dplyr::summarise(Fx=min(Fx))

如果我想要的话,我会这样做:

代码语言:javascript
运行
复制
max <- points %>% dplyr::group_by(claim_x) %>% dplyr::summarise(Fx=max(Fx))

问题是,如何在同一列中同时选择min和max?因此,输出应该具有与输入相同的结构,即只包含Fx和claim_x列的数据帧。

产出应是:

代码语言:javascript
运行
复制
# A tibble: 9 x 2
  claim_x    Fx
    <dbl> <dbl>
1       0  0   
2       0  0.3 
3     100  0.35
4     350  0.5 
5     350  0.6 
6     850  0.7 
7    2350  0.79
8    4850  0.9 
9    4850  1  
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-06-18 20:03:30

我们可以使用range并将其作为list列,然后将其作为unnest

代码语言:javascript
运行
复制
df %>%
  group_by(claim_x) %>%
  summarise(Fx = list(range(Fx))) %>%
  unnest %>%
  distinct
# A tibble: 9 x 2
#  claim_x    Fx
#    <int> <dbl>
#1       0  0   
#2       0  0.3 
#3     100  0.35
#4     350  0.5 
#5     350  0.6 
#6     850  0.7 
#7    2350  0.79
#8    4850  0.9 
#9    4850  1   

或者使用data.table

代码语言:javascript
运行
复制
library(data.table)
unique(setDT(df)[, .(Fx = range(Fx)), by = claim_x])

数据

代码语言:javascript
运行
复制
df <- structure(list(Fx = c(0, 0.05, 0.06, 0.1, 0.3, 0.35, 0.5, 0.6, 
0.7, 0.79, 0.9, 1), claim_x = c(0L, 0L, 0L, 0L, 0L, 100L, 350L, 
350L, 850L, 2350L, 4850L, 4850L)), class = "data.frame", 
row.names = c("1", 
"2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12"))
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56656283

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档