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

如何按年份拆分DataFrame并指定类别保持分组不拆分?

按年份拆分DataFrame并保留House B记录完整

问题背景

现有如下R语言生成的模拟DataFrame:

House = rep(c('A','B','C'), each=10)
Date = as.Date(c('2014-10-13','2014-10-20','2014-10-27','2014-11-03','2014-11-10','2014-10-30','2014-11-06','2014-11-13','2014-11-20','2014-11-27',
                 '2019-11-27','2019-12-04','2019-12-11','2019-12-18','2019-12-25','2020-01-01','2020-01-08','2020-01-15','2020-01-22','2020-01-29',
                 '2017-07-13','2017-07-20','2017-04-21','2017-04-28','2017-05-05','2017-05-12','2017-05-19','2017-05-26','2017-06-02','2017-06-09'))
Week = rep(c(1,2,3,4,5,6,7,8,9,10), times=3)
Value = c(0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.9,1,0.01,0.02,0.03,0.04,0.05,0.06,0.07,0.08,0.09,0.1,0.001,0.002,0.003,0.004,0.005,0.006,0.007,0.008,0.009,0.01)

mock = data.frame(House,Date,Week,Value)

需要按年份拆分该DataFrame,但必须将House为B的所有记录保留在同一个子DataFrame中,不能将其拆分为2019和2020两个独立部分。此前使用split()和dplyr::group_split()均未得到预期结果,期望得到包含合并后House B记录的子DataFrame列表。

解决方案

核心思路是自定义分组键:为House B的所有行设置统一的分组标识,其余行按年份分组,再基于该分组键完成拆分。

方法一:Base R实现

# 添加自定义分组键
mock$group_key = ifelse(mock$House == "B", 
                        "2019-2020", 
                        format(mock$Date, "%Y"))

# 按分组键拆分DataFrame
split_mock = split(mock, mock$group_key)

# 查看House B的合并结果
split_mock[["2019-2020"]]

方法二:dplyr实现

library(dplyr)

split_mock_dplyr = mock %>%
  # 生成自定义分组键
  mutate(group_key = ifelse(House == "B", "2019-2020", format(Date, "%Y"))) %>%
  # 按分组键拆分,不保留分组键列
  group_split(group_key, .keep = FALSE) %>%
  # 为列表元素设置名称
  setNames(unique(mock$group_key))

# 查看House B的合并结果
split_mock_dplyr[["2019-2020"]]

预期结果

拆分后的列表中,House B的10条记录将全部集中在名为2019-2020的子DataFrame中,示例输出如下:

$`2019-2020`
   House       Date Week Value
11     B 2019-11-27    1  0.01
12     B 2019-12-04    2  0.02
13     B 2019-12-11    3  0.03
14     B 2019-12-18    4  0.04
15     B 2019-12-25    5  0.05
16     B 2020-01-01    6  0.06
17     B 2020-01-08    7  0.07
18     B 2020-01-15    8  0.08
19     B 2020-01-22    9  0.09
20     B 2020-01-29   10  0.10

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 01:50:34