现在我要重做合并,因为我没有很好地命名列,但是,我想知道如何匹配列名的后缀并重命名列的该部分,其余部分保持不变。
例如,如果我有一个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.1
,Attribute1.2
,依此类推,直到匹配的列数为止。
答案 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"))
如果您可能使用点/空格代替了Attribute1
和Attribute2
,还可以将"\\.prev"
和"\\.cur"
模式替换为"\\.prev$"
并"\\.cur$"
,以确保我们在列名的末尾匹配它们。
答案 1 :(得分:2)
这是使用dplyr
和stringr
语法的想法
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"