选择所有行的样本,但只选择销售额最高的两个国家

时间:2021-04-09 15:35:23

标签: r dplyr

我想通过选择所有行,但仅选择总和(销售额)最高的两个国家/地区来准备带有 dplyr 的 slice_max 的样本。我需要求和(销售额)才能知道哪个国家的销售额更高。我做错了什么?

library(dplyr)
df1 <-
  data.frame(
    country = c(1, 1, 2, 2, 3),
    sales   = c(1, 1, 1, 2, 3)
  )

df1 <- df1 %>% 
  group_by(country) %>% 
  mutate( s = sum(sales)) %>% 
  slice_max(s, n=2)

编辑。用 NA 改变销售额会提高难度:

df1 <-
  data.frame(
    country = c(1, 1, 2, 2, 3),
    sales   = c(1, 1, NA, 4, 3)
  )

1 个答案:

答案 0 :(得分:1)

这对你有用吗?

编辑解决方案和数据

MyShape obj;

void setup(){
size(400,400);
obj = new MyShape();
}

void draw(){
background(0);
obj.display();
obj.cycle();  
obj.move();


}

reprex package (v1.0.0) 于 2021 年 4 月 9 日创建

之前错误的解决方案

我想你可能刚刚错过了library(dplyr) library(tidyr) df1 <- data.frame( country = c(1, 1, 2, 2, 3, 3), sales = c(1, 1, 1, 2, 3, 1) ) df1 %>% group_by(country) %>% mutate(tot_sales = sum(sales, na.rm=T)) %>% ungroup() %>% chop( sales) %>% slice_max(tot_sales, n = 2) %>% unchop(sales) #> # A tibble: 4 x 3 #> country tot_sales sales #> <dbl> <dbl> <dbl> #> 1 3 4 3 #> 2 3 4 1 #> 3 2 3 1 #> 4 2 3 2

ungroup()

看起来 top_n 已被 library(dplyr) df1 <- data.frame( country = c(1, 1, 2, 2, 3), sales = c(1, 1, 1, 2, 3) ) df1 %>% group_by(country) %>% mutate(tot_sales = sum(sales)) %>% ungroup() %>% top_n(2, tot_sales) #> # A tibble: 3 x 3 #> country sales tot_sales #> <dbl> <dbl> <dbl> #> 1 2 1 3 #> 2 2 2 3 #> 3 3 3 3 取代:

slice_max

reprex package (v1.0.0) 于 2021 年 4 月 9 日创建

相关问题