使用purrr::map根据模式重命名
我有一个变量名模式,对我来说是可以区分的,但不是因为信息是在变量名中编码的。所以,我感兴趣的变量都是从相同的随机字母无意义开始的,后面是一个与类型和时间相关的_数,所以它们看起来像无意义的35; 35;##,它转换为变量35;类型35;时间。类型范围为1:3和3个时间段1、5、7 是否有一种方法可以使用purr::和某种正则表达式在功能上重命名,以避免一次重命名一个(asf_1_1=`Var1 TypeA Time1`,asf_1_2=`Var1 TypeA Time2`。等等) 另外,我计划使用backtick格式的变量名,但你不必为这些建议担心 可复制的发行代码使用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`。等等) 另外,我计划使
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=“”
这很有用,但我无法同时运行多个。比如说`