使用purrr::map根据模式重命名

使用purrr::map根据模式重命名,r,regex,tidyverse,rename,purrr,R,Regex,Tidyverse,Rename,Purrr,我有一个变量名模式,对我来说是可以区分的,但不是因为信息是在变量名中编码的。所以,我感兴趣的变量都是从相同的随机字母无意义开始的,后面是一个与类型和时间相关的_数,所以它们看起来像无意义的35; 35;##,它转换为变量35;类型35;时间。类型范围为1:3和3个时间段1、5、7 是否有一种方法可以使用purr::和某种正则表达式在功能上重命名,以避免一次重命名一个(asf_1_1=`Var1 TypeA Time1`,asf_1_2=`Var1 TypeA Time2`。等等) 另外,我计划使

我有一个变量名模式,对我来说是可以区分的,但不是因为信息是在变量名中编码的。所以,我感兴趣的变量都是从相同的随机字母无意义开始的,后面是一个与类型和时间相关的_数,所以它们看起来像无意义的35; 35;##,它转换为变量35;类型35;时间。类型范围为1:3和3个时间段1、5、7

是否有一种方法可以使用purr::和某种正则表达式在功能上重命名,以避免一次重命名一个(asf_1_1=`Var1 TypeA Time1`,asf_1_2=`Var1 TypeA Time2`。等等) 另外,我计划使用backtick格式的变量名,但你不必为这些建议担心

可复制的发行代码

    x <- c("_1_1",
       "_1_2",
       "_1_3",
       "_2_1",
       "_2_2",
       "_2_3",
       "_3_1",
       "_3_2",
       "_3_3",
       "_4_3")
paste0("asf",x)

test <- t(as_tibble(rnorm(10, 5.5, .35)))
colnames(test) <- paste0("asf",x)

x如果列的格式相同,即
“\u 1\u 1”、“\u 1\u 2”、“\u 1\u 3”、“\u 2\u 1”、“\u 2\u 2”、“\u 2\u 3”
等,则可以使用
外部
生成列名

Type <- 1:3
Time <- 1:3
colnames(test) <- paste('Var1', c(t(outer(paste0('Type', LETTERS[Type]), 
                        paste0('Time', Time), paste, sep = ' '))), sep = ' ')
test

#      Var1 TypeA Time1 Var1 TypeA Time2 Var1 TypeA Time3 Var1 TypeB Time1
#value         5.516318         5.772653         5.033264         5.858262
#      Var1 TypeB Time2 Var1 TypeB Time3 Var1 TypeC Time1 Var1 TypeC Time2
#value         5.370641         5.213774         5.270832          5.26579
#      Var1 TypeC Time3
#value          5.55312

Type你的问题对我来说有点模棱两可;这就是你想做的吗

library(tidyverse)
x <- c("_1_1",
       "_1_2",
       "_1_3",
       "_2_1",
       "_2_2",
       "_2_3",
       "_3_1",
       "_3_2",
       "_3_3",
       "_4_3")
paste0("asf",x)

test <- t(as_tibble(rnorm(10, 5.5, .35)))
colnames(test) <- paste0("asf",x)

test_renamed <- as.data.frame(test) %>% 
  rename_with(~ sub("asf", "Var1 ", .x)) %>%
  rename_with(~ sub(" _", " Type", .x)) %>% 
  rename_with(~ sub("_", " Time", .x))

colnames(test_renamed)
#> [1] "Var1 Type1 Time1" "Var1 Type1 Time2" "Var1 Type1 Time3" "Var1 Type2 Time1"
#>[5] "Var1 Type2 Time2" "Var1 Type2 Time3" "Var1 Type3 Time1" "Var1 Type3 Time2"
#>[9] "Var1 Type3 Time3" "Var1 Type4 Time3"

test_renamed$`Var1 Type1 Time1`
#>[1] 5.868449
库(tidyverse)
x[1]“Var1 Type1 Time1”“Var1 Type1 Time2”“Var1 Type1 Time3”“Var1 Type2 Time1”
#>[5] “Var1 Type2 Time2”“Var1 Type2 Time3”“Var1 Type3 Time1”“Var1 Type3 Time2”
#>[9] “Var1 Type3 Time3”“Var1 Type4 Time3”
test_重命名为$`Var1 Type1 Time1`
#>[1] 5.868449

您可以添加您的预期输出吗?这听起来像是一项先从宽到长再进行重塑的工作,然后使用例如
tidyr::separate
来自动分隔条目以创建类型和时间列;test%>%as_tible()%%>%pivot_longer(everythings())%%>%sep=“”
这很有用,但我无法同时运行多个。比如说`