根据dplyr中的子字符串重命名所有列

时间:2018-11-15 15:39:38

标签: r dplyr

我正在尝试使用dplyr重命名数据框中的列...

SLX.16476.NEBNext01.H2CJLBBXY.s_6 <- c(5,4,4,2)
SLX.16476.NEBNext04.H2CJLBBXY.s_7 <- c(1,1,1,1)
SLX.16476.NEBNext04.H2CJLBBXY.s_8 <- c(8,3,4,9)
data <- data.frame(SLX.16476.NEBNext01.H2CJLBBXY.s_6, SLX.16476.NEBNext04.H2CJLBBXY.s_7, SLX.16476.NEBNext04.H2CJLBBXY.s_8)

我希望昵称为NEBNext01_6,NEBNext04_7,NEBNext04_8

在dplyr / tidyverse中是否可以轻松地做到这一点?

1 个答案:

答案 0 :(得分:2)

使用?sub

names(data) <- sub("^.*(NEBNext\\d+).*(_\\d+)$", "\\1\\2", names(data))

游戏名称为regex

  • 看看capturing groups以及如何“引用”它们。

这是与管道链兼容的版本。

data %>% {`names<-`(data, sub("^.*(NEBNext\\d+).*(_\\d+)$", "\\1\\2", names(.)))}

或者如索托斯(Sotos)所建议的那样,真正涉足整洁运动:

data %>% select_all(~sub("^.*(NEBNext\\d+).*(_\\d+)$", "\\1\\2",.))

或扎克暗示:

data %>% set_names(str_replace_all(names(.), "^.*(NEBNext\\d+).*(_\\d+)$", "\\1\\2"))