首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >R-聚合和返回值,使另一个维度最小化。

R-聚合和返回值,使另一个维度最小化。
EN

Stack Overflow用户
提问于 2018-07-19 12:12:06
回答 5查看 39关注 0票数 0

我有一个数据框架,一个日期,一个字符串(关键字)和一个度量(CPA)。

看起来是这样的:

代码语言:javascript
复制
Day          Keyword             CPA              
1/1/18       trip                11.88
2/1/18       trip                14.91
3/1/18       motorbike           13.68
4/1/18       motorbike           16.31
5/1/18       hotel               11.88
6/1/18       hotel               14.91
11/1/18      hotel               13.68
13/1/18      car                 16.31

对于每个关键字字符串,我想返回的日期,看到最低的CPA。

因此,在这种情况下,它将返回:

代码语言:javascript
复制
Lowest CPA Day          Keyword            
1/1/18                  trip                          
3/1/18                  motorbike                    
5/1/18                  hotel                        
13/1/18                 car                 

我可以退回最低的注册会计师:

代码语言:javascript
复制
report_CPA_lowest <- report_CPA %>% select(Keyword, CPA) %>%
                                    group_by(Keyword) %>%
                                    summarise(
                                      lowest_CPA = min(CPA)
                                    ) %>% arrange(lowest_CPA) 

但当我试图回归的时候,我失败了:

代码语言:javascript
复制
report_CPA_lowest <- report_CPA %>% select(Keyword, CPA) %>%
                                    group_by(Keyword) %>%
                                    summarise(
                                      lowest_CPA_date = which(Day == min(CPA))
                                    ) %>% arrange(lowest_CPA_date)

如果有更好的方法来做这件事,我将不胜感激!

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2018-07-19 12:18:42

(为重现性加载数据)

代码语言:javascript
复制
library(dplyr)

report_CPA <- read.table(text = "
Day          Keyword             CPA              
1/1/18       trip                11.88
2/1/18       trip                14.91
3/1/18       motorbike           13.68
4/1/18       motorbike           16.31
5/1/18       hotel               11.88
6/1/18       hotel               14.91
11/1/18      hotel               13.68
13/1/18      car                 16.31", header = TRUE)

您需要使用[ ]访问这些值。在本例中,您还可以使用which.min代替更一般的which

代码语言:javascript
复制
report_CPA %>%
  group_by(Keyword) %>%
  summarise(
    lowest_CPA = min(CPA),
    lowest_CPA_date = Day[which.min(CPA)]
  )

输出:

代码语言:javascript
复制
  Keyword   lowest_CPA lowest_CPA_date
  <fct>          <dbl> <fct>          
1 trip            11.9 1/1/18         
2 car             16.3 13/1/18        
3 motorbike       13.7 3/1/18         
4 hotel           11.9 5/1/18  
票数 2
EN

Stack Overflow用户

发布于 2018-07-19 12:19:54

我会去的

代码语言:javascript
复制
df %>% group_by(Keyword) %>% slice(which.min(CPA))

## A tibble: 4 x 3
## Groups:   Keyword [4]
#  Day     Keyword     CPA
#  <fct>   <fct>     <dbl>
#1 13/1/18 car        16.3
#2 5/1/18  hotel      11.9
#3 3/1/18  motorbike  13.7
#4 1/1/18  trip       11.9

这将简单地选择(第一个)行,每个关键字的CPA最小。

票数 1
EN

Stack Overflow用户

发布于 2018-07-20 00:48:41

使用dplyr::top_n

代码语言:javascript
复制
library(dplyr)
report_CPA %>%
  group_by(Keyword) %>%
  top_n(-1,CPA)

# # A tibble: 4 x 3
# # Groups:   Keyword [4]
#   Day     Keyword     CPA
#   <fct>   <fct>     <dbl>
# 1 1/1/18  trip       11.9
# 2 3/1/18  motorbike  13.7
# 3 5/1/18  hotel      11.9
# 4 13/1/18 car        16.3

负值表示对最小值的筛选。

中的R基

代码语言:javascript
复制
do.call(rbind, by(report_CPA,report_CPA$Keyword,function(x)x[which.min(x$CPA),]))

代码语言:javascript
复制
do.call(rbind,lapply(split(report_CPA, report_CPA$Keyword),function(x)x[which.min(x$CPA),]))
#               Day   Keyword   CPA
# car       13/1/18       car 16.31
# hotel      5/1/18     hotel 11.88
# motorbike  3/1/18 motorbike 13.68
# trip       1/1/18      trip 11.88
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51422413

复制
相关文章

相似问题

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