如何基于另一变量的连续值创建识别唯一分组的变量?
构建符合要求的时间序列数据集
看起来你需要生成一个满足特定规则的数据集,我来帮你完成完整的代码实现,同时保证每一步都符合你的要求:
第一步:加载依赖库并生成时间序列
首先我们加载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
相关产品推荐
相关产品推荐

