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

如何在长格式tibble中比对配对变量与逆序配对并取较大值

解决方案

你可以通过生成无顺序的配对标识分组取最大值实现,逻辑简洁易读,适配tidyverse的mutate操作习惯:

library(tidyverse)

# 载入你的示例数据
df1 <- tibble(
  n1 = rep(c('a', 'b', 'c'), each=3), 
  n2 = rep(c('a', 'b', 'c'),3), 
  v1 = c(41,94,40,85,82,35,66,70,76)
)

# 核心实现代码
df_result <- df1 %>%
  # 生成无顺序的配对唯一标识
  group_by(pair = pmap_chr(list(n1, n2), ~str_sort(c(...)) %>% str_c(collapse = "_"))) %>%
  # 同配对组内取最大值即为正反两个结果的较大值
  mutate(v1.high = max(v1)) %>%
  ungroup() %>%
  # 删除临时生成的配对标识列
  select(-pair)

如果你的数据量较大,不想用分组操作,也可以直接通过匹配逆序位置的方式单行实现:

df_result <- df1 %>%
  mutate(
    # 匹配当前行逆序配对的行位置
    rev_pos = match(str_c(n2, n1), str_c(n1, n2)),
    # 取当前值和逆序配对值的最大值
    v1.high = pmax(v1, v1[rev_pos])
  )

两种方式输出结果都和你给出的预期完全一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 12:18:03