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

如何在R中按supps分组及算术条件为指定变量生成随机值

R实现方案

第一步:加载依赖包

library(dplyr)
library(lubridate)
library(tidyr)
library(purrr)

第二步:原始数据预处理

先把日期列转为标准格式,筛选出6月的有效数据:

# 你提供的原始数据集
mydata=structure(list(supps = c("KR", "KR", "KR", "KR", "KR", "KR", 
"KR", "KR", "KR", "KR", "aeroclub", "aeroclub", "aeroclub", "aeroclub", 
"aeroclub", "aeroclub", "aeroclub", "aeroclub", "aeroclub", "aeroclub"
), date = c("01.05.2021", "01.06.2021", "02.05.2021", "02.06.2021", 
"03.05.2021", "03.06.2021", "04.05.2021", "04.06.2021", "05.05.2021", 
"05.06.2021", "01.05.2021", "01.06.2021", "02.05.2021", "02.06.2021", 
"03.05.2021", "03.06.2021", "04.05.2021", "04.06.2021", "05.05.2021", 
"05.06.2021"), turnover = c(0, 0, 32159.00888, 25220.0027, 0, 
0, 245312.682, 189901.1224, 0, 0, 1531959.833, 1591612, 1834696.667, 
1885169, 1871615.167, 1823398, 4891342, 5253701.167, 0, 0), fee = c(0, 
0, 651, 37, 0, 0, 2341, 7548, 0, 0, 40519.5, 30415, 34767.66667, 
39289, 39175.66667, 45798, 94819.5, 116803.1667, 0, 0), comiss = c(0, 
0, 764.81, 537.67, 0, 0, 8578.25, 6198.115, 0, 0, -2023.41, -1941.67, 
-550.82, 1323.23, -1029.47, -638.47, -1034.58, -1332.95, 0, 0
), intencive = c(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 26.4, 1945.8, 
2199.48, 3740.76, 6499.2, 32188.68, 42337.44, 0, 0)), class = "data.frame", row.names = c(NA, 
-20L))

# 日期格式转换、筛选6月数据
mydata_clean <- mydata %>%
  mutate(date = dmy(date),
         month = month(date)) %>%
  filter(month == 6)

第三步:按规则生成4天预测值

# 可选:设置随机种子,保证结果可复现,不需要可删除
set.seed(123)

pred_result <- mydata_clean %>%
  # 转长格式,对每个指标单独处理
  pivot_longer(cols = c(turnover, fee, comiss, intencive),
               names_to = "indicator", values_to = "value") %>%
  filter(value != 0) %>% # 过滤零值
  group_by(supps, indicator) %>%
  arrange(date) %>%
  slice_tail(n = 2) %>% # 取最近两个非零值
  summarise(prev_val = first(value),
            latest_val = last(value),
            .groups = "drop") %>%
  # 计算基准值和增减符号
  mutate(sum_val = prev_val + latest_val,
         sign = ifelse(latest_val > prev_val, 1, -1)) %>%
  # 生成4天随机值
  rowwise() %>%
  mutate(pred = list(
    tibble(
      date = seq(dmy("05.06.2021"), dmy("08.06.2021"), by = "1 day"),
      value = sum_val * (1 + sign * runif(4, min = 0.02, max = 0.1))
    )
  )) %>%
  unnest(pred) %>%
  # 转回和原始数据一致的宽格式
  pivot_wider(id_cols = c(supps, date),
              names_from = indicator,
              values_from = value) %>%
  # 可选:把日期转回原始的dd.mm.yyyy字符串格式
  mutate(date = format(date, "%d.%m.%Y"))

补充说明

  • 若需要把生成的预测数据和原始数据合并,直接执行bind_rows(mydata, pred_result)即可
  • 特殊情况处理:如果某组某指标全为0(比如KR分组的intencive),可以在summarise步骤前加判断逻辑,直接生成全0的预测值即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 17:27:05