You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何根据days_op与days_tc的最大值匹配对应xvar字段值?

解决方案

首先注意:测试数据中有重复的列名xvar_op,第二个对应days_tc的列应该是xvar_tc,修正后的测试数据如下:

test = structure(list(identificacionSujeto = c("dave", 
                                        "dave", "dave", 
                                        "dave", "dave"
), date= structure(c(18992, 18992, 18992, 18992, 18992), class = c("IDate", "Date")), 
categ = c("T", "T", "T", "T", "T"), 
days_op = c(24, 50, 3, 11, 70), 
xvar_op = c("CO", "ON", "CO", "ON", "CO"), 
categ_op = c("T", "T", "T", "T", "T"), 
days_tc = c(54, 15, 90, 10, 54), 
xvar_tc = c("PN", "NM", "PN", "PN", "PN"), 
categ_tc = c("Y", "V", "Y", "Y", "Y")), 
class = c("grouped_df", "tbl_df", "tbl", "data.frame"), 
row.names = c(NA, -5L), 
groups = structure(list(identificacionSujeto = "dave", 
                        .rows = structure(list(1:5), ptype = integer(0), 
                                          class = c("vctrs_list_of", "vctrs_vctr", "list"))), 
                   class = c("tbl_df", "tbl", "data.frame"), row.names = c(NA, -1L), .drop = TRUE))

方法一:长格式转换匹配最大值对应变量

使用dplyr和tidyr,将数据转为长格式后找到分组内最大天数对应的xvar,再合并回原数据:

library(dplyr)
library(tidyr)

test_result <- test %>%
  mutate(row_id = row_number()) %>%
  # 拆分days和xvar的分组信息
  pivot_longer(
    cols = starts_with(c("days_", "xvar_")),
    names_to = c(".value", "group"),
    names_pattern = "(days|xvar)_(.*)"
  ) %>%
  group_by(identificacionSujeto) %>%
  mutate(max_days = max(days)) %>%
  # 筛选最大值对应的xvar
  filter(days == max_days) %>%
  distinct(identificacionSujeto, max_xvar = xvar) %>%
  # 合并回原始数据
  right_join(test %>% mutate(row_id = row_number()), by = "identificacionSujeto") %>%
  select(-row_id) %>%
  rename(expected_output = max_xvar)

方法二:直接逻辑判断匹配最大值对应变量

无需转换格式,直接计算全局最大值并判断其所属分组,提取对应xvar:

test_result <- test %>%
  group_by(identificacionSujeto) %>%
  mutate(
    # 计算分组内days_op和days_tc的全局最大值
    global_max = max(c(days_op, days_tc)),
    # 根据最大值来源提取对应xvar
    expected_output = case_when(
      global_max %in% days_op ~ xvar_op[days_op == global_max][1],
      global_max %in% days_tc ~ xvar_tc[days_tc == global_max][1]
    )
  ) %>%
  ungroup() %>%
  select(-global_max)

运行任意一种方法后,test_result中的expected_output列都会和示例期望输出一致,所有行取值为PN。

内容的提问来源于stack exchange,提问作者cdcarrion

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 15:00:53