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

在R中基于其他变量匹配调整销售日期并聚合销售数据

解决贷项通知单匹配原始销售记录并聚合的问题

我有一个包含销售信息的数据集,其中负数的salesvalue代表贷项通知单。需要将这些贷项通知单的salesdate替换为其他所有字段完全匹配的原始销售记录(salesvalue>0)的salesdate,之后进行数据聚合。

示例数据:

data <- data.frame(number = 1:4,               
                   Date=c("02-01-2022", "06-01-2022", "07-01-2022", "06-01-2022"),
                   state = c("filet", "filet", "whole", "filet"),
                   specie = c("haddock", "cod", "haddock", "cod"),
                   salesvalue= c(300,500,200,-400),
                   salesdate=c("01-01-2022", "05-01-2022", "06-01-2022", "12-01-2022"))

原代码的问题

原代码分组时包含了salesvalue(示例中写为value),导致正负值被分到不同组,负数组内没有salesvalue>0的记录,因此无法匹配到对应的原始销售日期,最终返回NA。

解决方案

步骤1:修正贷项通知单的销售日期

按Date、state、specie(即除salesvalue和salesdate外的匹配字段)分组,为每组内的负数记录替换salesdate为组内正数记录的日期:

library(dplyr)

# 修正销售日期
data_fixed <- data %>%
  group_by(Date, state, specie) %>%
  mutate(
    # 提取组内所有正数记录的销售日期,取第一个(若有多个可根据需求调整)
    original_sales_date = first(salesdate[salesvalue > 0]),
    # 替换负数记录的销售日期,正数记录保留原日期
    salesdate = if_else(
      salesvalue < 0 & !is.na(original_sales_date),
      original_sales_date,
      salesdate
    )
  ) %>%
  ungroup()

运行后,编号4的salesdate会被修正为05-01-2022,与编号2的原始记录匹配。

步骤2:数据聚合

按修正后的salesdate及匹配字段分组,汇总销售金额:

# 聚合数据
data_aggregated <- data_fixed %>%
  group_by(Date, state, specie, salesdate) %>%
  summarise(total_salesvalue = sum(salesvalue), .groups = "drop")

最终聚合结果:

# A tibble: 3 × 5
  Date       state specie  salesdate  total_salesvalue
  <chr>      <chr> <chr>   <chr>                 <dbl>
1 02-01-2022 filet haddock 01-01-2022              300
2 06-01-2022 filet cod      05-01-2022              100
3 07-01-2022 whole haddock 06-01-2022              200

特殊情况处理

如果存在没有对应正数记录的负数贷项通知单,可以保留其原销售日期,避免出现NA:

data_fixed_safe <- data %>%
  group_by(Date, state, specie) %>%
  mutate(
    positive_dates = salesdate[salesvalue > 0],
    salesdate = if_else(
      salesvalue < 0 & length(positive_dates) > 0,
      first(positive_dates),
      salesdate
    )
  ) %>%
  select(-positive_dates) %>%
  ungroup()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 07:25:14