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

如何基于另一变量的连续值创建识别唯一分组的变量?

构建符合要求的时间序列数据集

看起来你需要生成一个满足特定规则的数据集,我来帮你完成完整的代码实现,同时保证每一步都符合你的要求:

第一步:加载依赖库并生成时间序列

首先我们加载lubridate库,然后生成你指定的升序POSIXct类型时间序列:

# 加载lubridate库处理时间格式
library(lubridate)

# 设置随机种子,确保结果可重复
set.seed(10)

# 生成20个均匀分布的时间点,从2016-01-01 00:00:00到01:00:00
date_time_seq <- seq(ymd_hms("2016-01-01 00:00:00"), ymd_hms("2016-01-01 01:00:00"), length.out = 20)

第二步:生成符合规则的value列

你的要求是value由连续的零或连续的大于零的正数组成,且每组连续值的长度大于1。我们可以通过以下方式生成:

# 先确定每组的长度,确保每组长度≥2,且总长度刚好为20
group_lengths <- c()
remaining_rows <- 20
while(remaining_rows > 0) {
  # 每组长度随机选2到5之间的数(避免单组长度过长)
  current_len <- sample(2:min(remaining_rows, 5), 1)
  group_lengths <- c(group_lengths, current_len)
  remaining_rows <- remaining_rows - current_len
}

# 交替生成零组和正数组(保证连续组类型不同)
value_vector <- c()
current_group_type <- sample(c("zero", "positive"), 1) # 随机决定第一组类型

for(len in group_lengths) {
  if(current_group_type == "positive") {
    # 生成len个大于0的随机正数
    value_vector <- c(value_vector, runif(len, min = 0.2, max = 6))
  } else {
    # 生成len个连续的0
    value_vector <- c(value_vector, rep(0, len))
  }
  # 切换下一组的类型
  current_group_type <- ifelse(current_group_type == "zero", "positive", "zero")
}

第三步:合并为最终数据集

把时间序列和value列合并成数据框,就是你需要的df了:

df <- data.frame(
  date.time = date_time_seq,
  value = value_vector
)

# 可以用下面的代码验证分组规则是否符合要求
rle(df$value > 0)

结果说明

运行完代码后,你得到的df会完全满足:

  • date.time是升序的POSIXct类型
  • value由连续零或连续正数组成,每组长度都大于1
  • 所有随机结果可复现(因为设置了set.seed(10))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 10:59:23