dplyr 中的 top_n 几乎是我想要的;然而,当有关系时,它会返回全部,但我希望它在关系中随机选择以满足我的 2 行截止。
top_number=4
x <- c(1, 2, 3, 3, 6, 6, 6)
y <- c(3, 2, 5, 1, 2, 3, 3)
xy <- data.frame(x, y)
xy
xy_1 <- dplyr::top_n(xy, top_number, wt = x)
xy_1
请注意,三个 6 应始终在 x 中选择,然后随机选择应在两个 3 中。
使用 tidyverse 解决方案会很好。
最佳答案
另一种选择可能是:
xy %>%
top_n(top_number, wt = x) %>%
sample_n(top_number)
为了解决更新的问题,添加
purrr
:xy %>%
top_n(top_number, wt = x) %>%
add_count(x, name = "n_all") %>%
add_count(x, y) %>%
group_split(n) %>%
map_dfr(~ mutate(., cond = if_else(n != n_all, 1, top_number)) %>%
sample_n(cond) %>%
select(x, y))
关于r - 根据指定列中的最小值从数据框中获取 X 行;并在关系中随机选择,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59634966/