我有一个数据框架,一个日期,一个字符串(关键字)和一个度量(CPA)。
看起来是这样的:
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。
因此,在这种情况下,它将返回:
Lowest CPA Day Keyword
1/1/18 trip
3/1/18 motorbike
5/1/18 hotel
13/1/18 car 我可以退回最低的注册会计师:
report_CPA_lowest <- report_CPA %>% select(Keyword, CPA) %>%
group_by(Keyword) %>%
summarise(
lowest_CPA = min(CPA)
) %>% arrange(lowest_CPA) 但当我试图回归的时候,我失败了:
report_CPA_lowest <- report_CPA %>% select(Keyword, CPA) %>%
group_by(Keyword) %>%
summarise(
lowest_CPA_date = which(Day == min(CPA))
) %>% arrange(lowest_CPA_date)如果有更好的方法来做这件事,我将不胜感激!
发布于 2018-07-19 12:18:42
(为重现性加载数据)
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。
report_CPA %>%
group_by(Keyword) %>%
summarise(
lowest_CPA = min(CPA),
lowest_CPA_date = Day[which.min(CPA)]
)输出:
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 发布于 2018-07-19 12:19:54
我会去的
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最小。
发布于 2018-07-20 00:48:41
使用dplyr::top_n的
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基
do.call(rbind, by(report_CPA,report_CPA$Keyword,function(x)x[which.min(x$CPA),]))或
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.88https://stackoverflow.com/questions/51422413
复制相似问题