如何使用 slice 从变量中获取最大值?

How to use slice to get the biggest values just from a variable?

我在使用函数 dplyr :: slice().

时遇到严重问题

我需要使用 mutate() 创建一个新变量,它只显示一个变量和一个观察值的最大值。具体来说,我需要在每个城镇的选举中展示获胜方,但我总是得到所有数据框的最大赢家,而不是每个城镇的获胜者。

我的老师告诉我使用:slice_max(my_variable, n = 1)。但我需要 link 它与另一个变量。有什么想法吗?

votos_cyl %>% 
  filter(prov %in% c("Ãvila")) %>%
  mutate(winner = slice_max(votos_partido_pc, n = 1)) %>%
  distinct(mun, .keep_all= TRUE) %>% 
  select(mun, part, ganador) %>% 
  arrange(desc(part)) %>% 
  slice_max(part, n=10) 

当我对此进行编码时,由于数字变量,它显示错误。 之前,我使用函数 max() 但结果是我之前所说的 df 的最大观察

问题

slice_max() 用于数据帧,而不是向量(这是您在 mutate().

中提供的向量)
library(dplyr)

# Slice max works with dataframes
mtcars %>% 
  slice_max(hp)
#>               mpg cyl disp  hp drat   wt qsec vs am gear carb
#> Maserati Bora  15   8  301 335 3.54 3.57 14.6  0  1    5    8

# But gives error inside mutate
mtcars %>% 
  mutate(
    x = slice_max(hp)
  )
#> Error in `mutate()`:
#> ! Problem while computing `x = slice_max(hp)`.
#> Caused by error in `UseMethod()`:
#> ! no applicable method for 'slice_max' applied to an object of class "c('double', 'numeric')"

解决方案

在您的情况下,您可以使用 which.max() 获得最多选票的政党:

# Let's pretend this is your data
df <- 
  mtcars %>% 
  tibble::rownames_to_column("party") %>% 
  select(
    party,
    town = cyl,
    votes = hp
  ) %>% 
  head()

df
#>               party town votes
#> 1         Mazda RX4    6   110
#> 2     Mazda RX4 Wag    6   110
#> 3        Datsun 710    4    93
#> 4    Hornet 4 Drive    6   110
#> 5 Hornet Sportabout    8   175
#> 6           Valiant    6   105

# To get the party with the most votes, you can use which.max()
df %>% 
  group_by(town) %>% 
  mutate(
    winner = party[which.max(votes)]
  )
#> # A tibble: 6 × 4
#> # Groups:   town [3]
#>   party              town votes winner           
#>   <chr>             <dbl> <dbl> <chr>            
#> 1 Mazda RX4             6   110 Mazda RX4        
#> 2 Mazda RX4 Wag         6   110 Mazda RX4        
#> 3 Datsun 710            4    93 Datsun 710       
#> 4 Hornet 4 Drive        6   110 Mazda RX4        
#> 5 Hornet Sportabout     8   175 Hornet Sportabout
#> 6 Valiant               6   105 Mazda RX4

reprex package (v2.0.1)

创建于 2022-03-30