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

如何基于月份分组为R dataframe创建虚拟变量

在R中按自定义月份分组创建虚拟变量

步骤1:还原示例数据集

先复现你提供的初始数据框:

df <- data.frame(
  Date = as.Date(c("2012-03-22", "2012-03-22", "2012-04-11", 
                   "2013-05-03", "2013-05-03", "2015-06-12", "2015-07-15")),
  Sales = c(22, 18, 20, 26, 15, 29, 22),
  Type = c("A", "B", "C", "A", "C", "A", "B")
)

步骤2:提取日期中的月份

可以用基础R或lubridate包快速提取月份:

  • 基础R实现:
df$Month <- as.integer(format(df$Date, "%m"))
  • lubridate包实现(更直观):
# 未安装包先执行:install.packages("lubridate")
library(lubridate)
df$Month <- month(df$Date)

步骤3:生成自定义虚拟变量

以下三种方法任选其一,满足不同场景需求:

方式一:用dplyr手动生成(代码直观,易调整规则)

# 未安装包先执行:install.packages("dplyr")
library(dplyr)

df_final <- df %>%
  mutate(
    Dummy1 = as.integer(Month == 3),    # 3月对应Dummy1
    Dummy2 = as.integer(Month == 5),    # 5月对应Dummy2
    Dummy3 = as.integer(Month %in% c(6,7)) # 6、7月对应Dummy3
  ) %>%
  select(-Month) # 移除中间生成的Month列

方式二:用model.matrix生成(适配建模场景,自动处理因子)

# 定义分组标签
df$Group <- factor(
  case_when(
    df$Month == 3 ~ "Dummy1",
    df$Month == 5 ~ "Dummy2",
    df$Month %in% c(6,7) ~ "Dummy3",
    TRUE ~ NA_character_
  ),
  levels = c("Dummy1", "Dummy2", "Dummy3")
)

# 生成虚拟变量矩阵(-1表示不生成截距项)
dummies <- model.matrix(~ Group - 1, data = df)

# 合并并清理中间列
df_final <- cbind(df, dummies) %>%
  select(-Month, -Group)

方式三:用fastDummies包快速生成(代码最简洁)

# 未安装包先执行:install.packages("fastDummies")
library(fastDummies)

df$Group <- case_when(
  df$Month == 3 ~ "Dummy1",
  df$Month == 5 ~ "Dummy2",
  df$Month %in% c(6,7) ~ "Dummy3",
  TRUE ~ NULL
)

# 生成虚拟变量并清理冗余列
df_final <- dummy_cols(df, select_columns = "Group", remove_selected_columns = TRUE) %>%
  select(-Month)

最终结果

执行上述任意方法后,df_final即为目标数据集,输出如下:

print(df_final)
#        Date Sales Type Dummy1 Dummy2 Dummy3
# 1 2012-03-22    22    A      1      0      0
# 2 2012-03-22    18    B      1      0      0
# 3 2012-04-11    20    C      0      0      0
# 4 2013-05-03    26    A      0      1      0
# 5 2013-05-03    15    C      0      1      0
# 6 2015-06-12    29    A      0      0      1
# 7 2015-07-15    22    B      0      0      1

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 23:15:59