我想通过选择所有行,但仅选择总和(销售额)最高的两个国家/地区来准备带有 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)
)
答案 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 日创建