我有一个整数变量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和正值为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 = _)
colnames(df)[colnames(df) == "lead0"] <- "event"
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

dplyr:

library(dplyr)
df %>%
  rename_with(.fn = ~
    if_else(.x == "period_0", "event",
            sub("period_", "lead", sub("period_-", "lag", .x))))
#   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

起始数据

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))

R相关问答推荐

混淆矩阵,其中每列和等于1

以R为基数排列奇数个图

使用gggrassure减少地块之间的空间

如何按排序顺序打印一个框架中所有精确的唯一值?

过滤器数据.基于两列的帧行和R中的外部向量

筛选出以特定顺序患病的个体

使用整齐的计算(curl -curl )和杂音

在R中使用Scale_y_Break后更改y轴标签

根据列A中的差异变异列,其中行由列B中的相对值标识

将Posict转换为数字时的负时间(以秒为单位)

方法::slotName如何处理非类、非字符的参数?

在R中创建连续的期间

R -如何分配夜间GPS数据(即跨越午夜的数据)相同的开始日期?

按列中显示的配对组估算NA值

如何删除设置大小的曲线图并添加条形图顶部数字的百分比

Conditional documentr::R中数据帧的summarize()

Data.table::Shift type=允许扩展数据(&Q;LAG&Q;)

从字符串01JAN2021创建日期

通过分析特定列中的字符串在数据框中创建新的行和列

如何将数据框压缩为更宽,同时将行输入保持为行输入,而不是R中的列名?