重命名列名的后缀部分,但其余部分保持不变

时间:2018-12-11 20:10:12

标签: r regex rename suffix

现在我要重做合并,因为我没有很好地命名列,但是,我想知道如何匹配列名的后缀并重命名列的该部分,其余部分保持不变。

例如,如果我有一个data.frame(也可以是data.table,也没关系-我可以将其转换):

d <- data.frame("ID" = c(1, 2, 3),
                "Attribute1.prev" = c("A", "B", "C"),
                "Attribute1.cur" = c("D", "E", "F"))

现在想象一下,有数百个与样本DT中的第2列和第3列相似的列。我将如何检查所有以".prev"结尾的列更改为".1",以所有以".cur"结尾的列更改为".2"

因此,新列的名称将为:ID(未更改),Attribute1.1Attribute1.2,依此类推,直到匹配的列数为止。

3 个答案:

答案 0 :(得分:2)

我们可以使用R为底数

names(d) <- sub("\\.prev", ".1", sub("\\.cur", ".2", names(d)))
d
#   ID Attribute1.1 Attribute1.2
# 1  1            A            D
# 2  2            B            E
# 3  3            C            F

通过stringr包,您还可以使用

names(d) <- str_replace_all(names(d), c("\\.prev" = ".1", "\\.cur" = ".2"))

如果您可能使用点/空格代替了Attribute1Attribute2,还可以将"\\.prev""\\.cur"模式替换为"\\.prev$""\\.cur$",以确保我们在列名的末尾匹配它们。

答案 1 :(得分:2)

这是使用dplyrstringr语法的想法

library(dplyr); library(stringr)
names(d) <- 
  d %>% names() %>% 
  str_replace(".prev", ".1") %>% 
  str_replace(".cur", ".2")

干杯!

答案 2 :(得分:1)

这里是gsubfn

的一个选项
library(gsubfn)
names(d) <- gsubfn("(\\w+)", list(prev = 1, cur = 2), names(d))
names(d)
#[1] "ID"           "Attribute1.1" "Attribute1.2"