我正在尝试使用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中是否可以轻松地做到这一点?
答案 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"))