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

R语言data.frame中查找收发人互换的下一行并计算count差值的方法

基于tidyverse的实现方案

你可以用dplyr的行处理逻辑完成需求,代码示例如下:
首先加载依赖包:

library(tidyverse)

示例数据集构造(和给出的测试数据一致):

id = 1:10
sender = c(1, 2, 3, 2, 3, 1, 2, 1, 2, 3)
recipient = c(2, 1, 2, 3, 1, 2, 3, 3, 1, 1)
count = c(1, 4, 5, 7, 12, 17, 24, 31, 34, 41)
df <- data.frame(id, sender, recipient, count)

核心处理代码:

df_result <- df %>%
  # 按行逐行处理记录
  rowwise() %>%
  mutate(
    diff_count = {
      # 查找当前行之后第一个收发身份互换的记录
      match_count <- df %>%
        filter(
          id > cur_data()$id,
          sender == cur_data()$recipient,
          recipient == cur_data()$sender
        ) %>%
        # 仅保留首个匹配结果
        slice_head(n = 1) %>%
        pull(count)
      # 匹配成功返回count差值,匹配失败返回NA
      ifelse(length(match_count) == 1, match_count - count, NA_real_)
    }
  ) %>%
  # 取消行分组模式,避免影响后续数据处理
  ungroup()

运行后得到的df_result$diff_count和预期输出完全一致:3 13 2 NA 19 17 NA 10 NA NA
如果需要处理的数据集量级较大,可以提前为每一对收发组合生成不区分顺序的唯一分组标识,按组处理可进一步提升运行效率。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 15:39:04