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

如何为每周数据替换为单天随机值?R语言采样频率调整需求

解决方案

要实现每个周单独随机选择一天,并将该天的y值填充到该周所有行的y_week列,可以用以下两种方法:

方法1:从每周实际存在的日期中随机抽取(推荐)

这种方法避免抽到该周没有的日期,保证y_week不会出现NA:

library(dplyr)

# 为每个周随机选取一行(对应一个随机日期的y值)
week_selected <- data %>%
  group_by(Week) %>%
  slice_sample(n = 1) %>%
  select(Week, y_week = y)

# 将周度y值合并回原数据框
data <- data %>%
  left_join(week_selected, by = "Week")

运行后,每个周的所有行都会被填充该周随机选中的那一天的y值,同时保留原有的x、y等字段。

方法2:从所有星期日期中随机抽取(允许抽到该周不存在的日期)

如果需要严格从完整星期列表中抽取日期(即使该周没有记录),可以用以下代码:

library(dplyr)

weekdays <- c("Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday")

# 为每个周生成一个随机日期
week_rand_days <- data.frame(
  Week = unique(data$Week),
  rand_day = sample(weekdays, length(unique(data$Week)), replace = TRUE)
)

# 合并随机日期并匹配对应y值
data <- data %>%
  left_join(week_rand_days, by = "Week") %>%
  group_by(Week) %>%
  mutate(y_week = ifelse(any(Day == rand_day), y[Day == rand_day][1], NA)) %>%
  select(-rand_day)

如果抽到的日期在该周没有记录,y_week会被设为NA,你可以根据需求调整这部分逻辑。

你之前代码的问题

  1. 全局随机而非按周随机:你之前只生成了一个全局的randay,所有周都会用同一个日期,不符合“每个周单独选一天”的需求;
  2. 列名大小写错误:代码中用了data$day,但数据框的列名是Day(大写),导致匹配失败;
  3. 未初始化列:no = data$y_week中的y_week还未创建,会引发错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 01:48:34