我有一个问题,我重复了一个总体的样本,并希望从候选池中删除抽样度量中具有最低N值的个人.

举一个更具体的例子,想象一场比赛,所有球队每周都会从一场比赛中获得一分,表现最差的两支球队每周都会被淘汰.

对于下面的示例数据集,我们应该有10个团队在1周后剩余,8个团队在2周后,6个团队在3周后,4个团队在4周后.

Reprex Below当前为第一周生成正确的df_result,但不会为随后的几周生成正确的df_result.感谢您能提供的任何建议.

library(tibble)
library(dplyr)
library(purrr)
library(tidyr)
library(stringr)

set.seed(42)

df <- tibble::tibble(
  week = rep(1:4, 12) %>% sort(),
  team = rep(stringr::str_c("team_", 1:12), 4),
  score = runif(48, 0, 100) %>% ceiling()
) %>%
  dplyr::arrange(score) %>%
  # dplyr::group_by(week) %>%
  split(.$week) 

df_result <- df %>% 
  purrr::map2(
    .x = ., .y = dplyr::lag(.),
    ~ dplyr::filter(.data = .x, !(team %in% .y$team)) %>% dplyr::slice_max(
      .data = .,
      order_by = score,
      n = -2,
      with_ties = TRUE
    ))

创建于2023-08-17年第reprex v2.0.2

推荐答案

使用accumulate:

df |> 
  accumulate(\(x, d) {
    d |>
      filter(team %in% x$team) |>
      slice_max(order_by = score, n = -2)}, .init = df$`1`) |> 
    tail(-1) # accumulate (frustratingly!) keeps the initial value in results, so we need to remove that

R相关问答推荐

使用Shiny组合和显示复制和粘贴的数据

使用gggrassure减少地块之间的空间

如何在R中合并和合并多个rabrame?

如何在emmeans中计算连续变量的对比度

在另一个函数中调用ggplot2美学

二维样条,严格以一个参数递增

为了网络分析目的,将数据框转换为长格式列联表

使用范围和单个数字将数字与字符串进行比较

R -在先前group_by级别汇总时获取最大大小子组的计数

如何在反曲线图中更改X标签

如何使用FormC使简单算术运算得到的数字是正确的?

仅当后续值与特定值匹配时,才在列中回填Nas

快速合并R内的值

访问数据帧中未定义的列时出现R错误

如何在GALT包的函数&geom_x样条线中调整线宽

R try Catch in the loop-跳过缺少的值并创建一个DF,显示跳过的内容

如何在R中创建这些列?

每行不同列上的行求和

按两个条件自动过滤数据

真实世界坐标的逆st_变换