R用通配符重命名多个列,并用()重命名_

R用通配符重命名多个列,并用()重命名_,r,rename,R,Rename,图书馆(tidyverse) 我想重新命名一串列,并尝试在R中使用rename_at()或rename_with(),但没有多大成功,有人能帮忙吗?非常感谢你的帮助 原始数据帧列名 tibble( AAA_BBB1_P1_Elev = as.double(), AAA_BBB2_P2_Elev = as.double(), AAA_BBB2_P3_Elev = as.double() ) 要将列名更改为 tibble( `BBB1-P1E` = as.double(), `BBB1-P2E`

图书馆(tidyverse)

我想重新命名一串列,并尝试在R中使用rename_at()或rename_with(),但没有多大成功,有人能帮忙吗?非常感谢你的帮助

原始数据帧列名

tibble(
AAA_BBB1_P1_Elev = as.double(),
AAA_BBB2_P2_Elev = as.double(),
AAA_BBB2_P3_Elev = as.double()
)
要将列名更改为

tibble(
`BBB1-P1E` = as.double(),
`BBB1-P2E` = as.double(),
`BBB1-P3E` = as.double()
)


我们可以使用
rename\u all
str\u replace

library(dplyr)
library(stringr)
tbl2 <- tbl1 %>%
     rename_all(~ str_replace_all(str_replace(., '^[^_]+_(.*)_(.)[^.]+$', "\\1\\2"), '_', "-"))
库(dplyr)
图书馆(stringr)
tbl2%
重命名_all(~str_replace_all(str_replace(,'^[^_]+(+.*)_(+.[^.]+$,“\\1\\2”),'',“-”)
-输出

tbl2
# A tibble: 0 x 3
# … with 3 variables: `BBB1-P1E` <dbl>, `BBB2-P2E` <dbl>, `BBB2-P3E` <dbl>
tbl2
#一个tibble:0 x 3
#…有3个变量:`BBB1-P1E`、`BBB2-P2E`、`BBB2-P3E`
数据
tbl1受阿克伦答案的启发,我想出了一个解决方案

remove <- c("AAA_BBB[0-9]_", "lev", "_") 

tibble(
AAA_BBB1_P1_Elev = as.double(), 
AAA_BBB2_P2_Elev = as.double(), 
AAA_BBB2_P3_Elev = as.double()
) %>% 
rename_all(~ str_remove_all(., paste(remove, collapse = "|"))) %>% 
rename_at(vars(ends_with("E")), ~ paste0("BBB1-", .x)) 

# A tibble: 0 x 3 
# ... with 3 variables: BBB1-P1E <dbl>, BBB1-P2E <dbl>, BBB1-P3E <dbl> 
删除%
重命名_all(~str_remove_all(,粘贴(remove,collapse=“|”))%%>%
将_重命名为(变量(以“E”结尾)~paste0(“BBB1-”,.x))
#一个tibble:0 x 3
# ... 有3个变量:BBB1-P1E、BBB1-P2E、BBB1-P3E
基本R选项:

names(df) <- sub('\\w+_(\\w+)_(\\w+)_.*', '\\1-\\2E', names(df))
names(df)
#"BBB1-P1E" "BBB2-P2E" "BBB2-P3E"

names(df)不太好……但受你答案的启发,我找到了一个解决办法,``删除%rename_all(~str_删除_all(,粘贴(删除,折叠=“|”))]>%rename_at(vars(以(“E”),~paste0(“BBB1-”,.x”)。#一个tible:0 x 3#。。。有三个变量:
BBB1-P1E
BBB1-P2E
BBB1-P3E
````@尼克我发布的解决方案是基于模式的出现,即我们正在删除第一个单词,然后是
,然后是
,最后是Elevend@Nick我想现在应该可以更新了。我忽略了结尾处的E谢谢@akrun,为了使它与其他列(未显示)保持一致,我需要格式为“BBB1-P1E”、“BBB1-P2E”等,这就是原始解决方案不起作用的原因@akrun:-)非常感谢您在这方面的帮助
names(df) <- sub('\\w+_(\\w+)_(\\w+)_.*', '\\1-\\2E', names(df))
names(df)
#"BBB1-P1E" "BBB2-P2E" "BBB2-P3E"