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

如何在R中基于部分字符串匹配替换虚拟变量列名?

解决方案

方法一:基础R实现

先生成虚拟列,再通过自定义函数批量修改列名:

library(fastDummies)

# 创建原始数据并生成虚拟列
df <- data.frame(period = c(-3, -2, -1, 0, 1, 2, 3))
df <- dummy_cols(df, select_columns = "period")

# 批量重命名虚拟列
colnames(df) <- sapply(colnames(df), function(col) {
  if (col == "period") return(col)
  # 提取period_后的数值部分
  val <- sub("period_", "", col)
  if (val == "0") {
    "event"
  } else if (as.integer(val) < 0) {
    paste0("lag", abs(as.integer(val)))
  } else {
    paste0("lead", val)
  }
})

# 输出结果
df

方法二:tidyverse(dplyr)实现

结合rename_with和case_when更简洁地完成重命名:

library(fastDummies)
library(dplyr)
library(stringr)

df <- data.frame(period = c(-3, -2, -1, 0, 1, 2, 3)) %>%
  dummy_cols(select_columns = "period") %>%
  rename_with(
    .cols = starts_with("period_"),
    .fn = function(col) {
      val <- str_remove(col, "period_")
      case_when(
        val == "0" ~ "event",
        as.integer(val) < 0 ~ paste0("lag", abs(as.integer(val))),
        TRUE ~ paste0("lead", val)
      )
    }
  )

# 输出结果
df

最终输出

period lag1 lag2 lag3 event lead1 lead2 lead3
1     -3    0    0    1     0     0     0     0
2     -2    0    1    0     0     0     0     0
3     -1    1    0    0     0     0     0     0
4      0    0    0    0     1     0     0     0
5      1    0    0    0     0     1     0     0
6      2    0    0    0     0     0     1     0
7      3    0    0    0     0     0     0     1

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 15:27:27