我有一个整数变量
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
感谢任何帮助,谢谢!
双-
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))