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

如何对分组后的DataFrame每两行应用自定义函数?

解决方案

假设你的tibble每个ID分组下恰好包含两行数据(对应一组Team组合),可以用dplyr的分组操作结合自定义函数来实现需求,具体步骤如下:

1. 示例数据与自定义函数

先构造模拟数据,并定义你的proprietary_function(这里以根据Price返回Team组合标识为例,你可以替换为自己的实际逻辑):

library(tibble)
library(dplyr)

# 模拟输入数据
sample_data <- tibble(
  ID = rep(1:3, each = 2),
  Team = c("A1", "B1", "A2", "B2", "A3", "B3"),
  Price = c(100, 150, 200, 250, 300, 350)
)

# 自定义函数:传入两个Price值,返回对应的Team组合标识
proprietary_function <- function(p1, p2) {
  # 这里替换为你实际的函数逻辑,示例仅做演示
  if (p1 == 100 && p2 == 150) {
    "A1B1"
  } else if (p1 == 200 && p2 == 250) {
    "A2B2"
  } else {
    "A3B3"
  }
}

2. 分组生成New_Value列

通过group_by(ID)分组后,用mutate调用自定义函数,传入组内的两个Price值,函数返回的结果会自动赋值给组内的两行:

result <- sample_data %>%
  group_by(ID) %>%
  mutate(
    # 传入组内第一个和第二个Price值,生成New_Value
    New_Value = proprietary_function(Price[1], Price[2])
    # 如果组内行顺序不确定,用first(Price)和last(Price)更稳妥
    # New_Value = proprietary_function(first(Price), last(Price))
  ) %>%
  ungroup()

# 查看结果
print(result)

3. 处理异常分组(可选)

如果存在ID分组下行数不为2的情况,先过滤掉这些异常组:

filtered_data <- sample_data %>%
  group_by(ID) %>%
  filter(n() == 2) %>%
  ungroup()

# 再对过滤后的数据执行上述分组赋值操作

说明

  • 函数proprietary_function的参数是组内的两个Price值,你可以根据实际需求编写逻辑,返回对应的Team组合标识(如A1B1)。
  • 分组后mutate会将函数结果应用到组内所有行,所以同一个ID下的两行会共享同一个New_Value。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 11:52:50