如何使用 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
我在使用函数 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