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

如何从DataFrame按IND_LOC分组生成时间序列列表?

解决方案:将分组DataFrame转换为命名时间序列列表

没问题,这可以通过R的dplyr和zoo包轻松实现,下面是完整的步骤和代码:

1. 加载必要的包

首先确保你已经安装了这些包,然后加载它们:

library(dplyr)
library(zoo)

2. 定义时间序列转换函数

我们先写一个辅助函数,用来把单个分组的数据转换成标准的时间序列(ts对象):

convert_to_ts <- function(group_data, value_col = "total_this_month") {
  # 从yearmon类型中提取起始年份和月份
  ym_values <- group_data$year_month
  start_year <- as.integer(floor(ym_values))
  start_month <- as.integer(12 * (ym_values - floor(ym_values)) + 1)
  
  # 创建月度时间序列(频率设为12)
  ts(
    data = group_data[[value_col]],
    start = c(start_year[1], start_month[1]),
    frequency = 12
  )
}

3. 生成目标时间序列列表

假设你的DataFrame名为df,执行以下代码即可生成以IND_LOC值命名的时间序列列表:

time_series <- df %>%
  # 按IND_LOC拆分成多个分组数据框
  group_split(IND_LOC) %>%
  # 给列表的每个元素设置对应的IND_LOC名称
  set_names(unique(df$IND_LOC)) %>%
  # 对每个分组应用转换函数
  lapply(convert_to_ts)

4. 验证结果

执行str(time_series)就能看到和你示例一致的结构,比如:

> str(time_series)
List of 89
 $ 1_1: Time-Series [1:N] from YYYY to YYYY: ...
 $ 1_2: Time-Series [1:N] from YYYY to YYYY: ...
 ...
 $ 8_9: Time-Series [1:6] from 2013 to 2013: 3960268 3051909 3504636 3234451 3409146 3619219

5. 切换数值列(可选)

如果你想基于mean_this_month生成时间序列,只需要在调用函数时指定value_col参数:

time_series_mean <- df %>%
  group_split(IND_LOC) %>%
  set_names(unique(df$IND_LOC)) %>%
  lapply(convert_to_ts, value_col = "mean_this_month")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 06:39:22