Top_n return 最大值和最小值 - R
Top_n return both max and min value - R
top_n() 命令是否可以同时 return 最大值和最小值?
使用参考页中的示例 https://dplyr.tidyverse.org/reference/top_n.html
我尝试了以下方法
df <- data.frame(x = c(10, 4, 1, 6, 3, 1, 1))
df %>% top_n(c(1,-1)) ## returns an error
df <- data.frame(x = c(10, 4, 1, 6, 3, 1, 1))
df %>% top_n(1) %>% top_n(-1) ## returns only max value
谢谢
不涉及 top_n()
,但您可以尝试:
df %>%
arrange(x) %>%
slice(c(1, n()))
x
1 1
2 10
或者:
df %>%
slice(which(x == max(x) | x == min(x))) %>%
distinct()
或者(由@Gregor 提供):
df %>%
slice(c(which.min(x), which.max(x)))
这是一个带有 top_n
的选项,我们传递一个基于 returns TRUE for min/max 使用 range
的逻辑向量,然后得到 distinct
行,因为范围有联系,即存在重复元素
library(dplyr)
df %>%
top_n(x %in% range(x), 1) %>%
distinct
# x
#1 10
#2 1
我喜欢@tmfmnk 的回答。如果你想使用top_n功能,你可以这样做:
df <- data.frame(x = c(10, 4, 1, 6, 3, 1, 1))
bind_rows(
df %>% top_n(1),
df %>% top_n(-1)
)
# this solution addresses the specification in comments
df %>%
group_by(y) %>%
summarise(min = min(x),
max = max(x),
average = mean(x))
想法类似于@Jakub 对 purrr::map_dfr
的回答
library(tidyverse) # dplyr and purrrr for map_dfr
df %>%
map_dfr(c(1, -1), top_n, wt = x, x = .)
# x
# 1 10
# 2 1
# 3 1
# 4 1
top_n() 命令是否可以同时 return 最大值和最小值?
使用参考页中的示例 https://dplyr.tidyverse.org/reference/top_n.html
我尝试了以下方法
df <- data.frame(x = c(10, 4, 1, 6, 3, 1, 1))
df %>% top_n(c(1,-1)) ## returns an error
df <- data.frame(x = c(10, 4, 1, 6, 3, 1, 1))
df %>% top_n(1) %>% top_n(-1) ## returns only max value
谢谢
不涉及 top_n()
,但您可以尝试:
df %>%
arrange(x) %>%
slice(c(1, n()))
x
1 1
2 10
或者:
df %>%
slice(which(x == max(x) | x == min(x))) %>%
distinct()
或者(由@Gregor 提供):
df %>%
slice(c(which.min(x), which.max(x)))
这是一个带有 top_n
的选项,我们传递一个基于 returns TRUE for min/max 使用 range
的逻辑向量,然后得到 distinct
行,因为范围有联系,即存在重复元素
library(dplyr)
df %>%
top_n(x %in% range(x), 1) %>%
distinct
# x
#1 10
#2 1
我喜欢@tmfmnk 的回答。如果你想使用top_n功能,你可以这样做:
df <- data.frame(x = c(10, 4, 1, 6, 3, 1, 1))
bind_rows(
df %>% top_n(1),
df %>% top_n(-1)
)
# this solution addresses the specification in comments
df %>%
group_by(y) %>%
summarise(min = min(x),
max = max(x),
average = mean(x))
想法类似于@Jakub 对 purrr::map_dfr
library(tidyverse) # dplyr and purrrr for map_dfr
df %>%
map_dfr(c(1, -1), top_n, wt = x, x = .)
# x
# 1 10
# 2 1
# 3 1
# 4 1