如何根据R中的部分字符串匹配替换列名?

问题描述 投票:0回答:1

我有一个整数变量

period
,我用它来制作虚拟列,如下所示:

library(fastDummies)

df <- data.frame(period = c(-3, -2, -1, 0, 1, 2, 3))

df <- dummy_cols(df, select_columns = "period")

 period period_-1 period_-2 period_-3 period_0 period_1 period_2 period_3
     -3         0         0         1        0        0        0        0
     -2         0         1         0        0        0        0        0
     -1         1         0         0        0        0        0        0
      0         0         0         0        1        0        0        0
      1         0         0         0        0        1        0        0
      2         0         0         0        0        0        1        0
      3         0         0         0        0        0        0        1

我想将

period
的负值和正值虚拟列的名称分别替换为“lag”和“lead”。理想输出(
period_0
手动重命名为
event
):

 period      lag1      lag2      lag3    event    lead1    lead2    lead3
     -3         0         0         1        0        0        0        0
     -2         0         1         0        0        0        0        0
     -1         1         0         0        0        0        0        0
      0         0         0         0        1        0        0        0
      1         0         0         0        0        1        0        0
      2         0         0         0        0        0        1        0
      3         0         0         0        0        0        0        1

感谢任何帮助,谢谢!

r string variables dplyr tidyverse
1个回答
0
投票

双-

sub
将起作用:

colnames(df) <- sub("period_-", "lag", colnames(df)) |>
  sub("period_", "lead", x = _)
df
#   period lag1 lag2 lag3 lead0 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

起始数据

df <- structure(list(period = -3:3, "period_-1" = c(0L, 0L, 1L, 0L, 0L, 0L, 0L), "period_-2" = c(0L, 1L, 0L, 0L, 0L, 0L, 0L), "period_-3" = c(1L, 0L, 0L, 0L, 0L, 0L, 0L), period_0 = c(0L, 0L, 0L, 1L, 0L, 0L, 0L), period_1 = c(0L, 0L, 0L, 0L, 1L, 0L, 0L), period_2 = c(0L, 0L, 0L, 0L, 0L, 1L, 0L), period_3 = c(0L, 0L, 0L, 0L, 0L, 0L, 1L)), class = "data.frame", row.names = c(NA, -7L))
© www.soinside.com 2019 - 2024. All rights reserved.