重命名列名的后缀部分,但其余部分保持不变
Rename suffix part of column name but keep the rest the same
现在我正在重做合并,因为我对列的命名很糟糕,但是,我想知道如何匹配列名的后缀并重命名列的那一部分,同时保持其余部分不变。
例如,如果我有一个 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
等等匹配的列。
我们可以用 base 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
,您可能有一些名称带有 dots/spaces,您也可以将 "\.prev"
和 "\.cur"
模式替换为 "\.prev$"
和 "\.cur$"
以确保我们在列名称的末尾匹配它们。
这是一个使用 dplyr
& stringr
语法的想法
library(dplyr); library(stringr)
names(d) <-
d %>% names() %>%
str_replace(".prev", ".1") %>%
str_replace(".cur", ".2")
干杯!
这里有一个选项gsubfn
library(gsubfn)
names(d) <- gsubfn("(\w+)", list(prev = 1, cur = 2), names(d))
names(d)
#[1] "ID" "Attribute1.1" "Attribute1.2"
现在我正在重做合并,因为我对列的命名很糟糕,但是,我想知道如何匹配列名的后缀并重命名列的那一部分,同时保持其余部分不变。
例如,如果我有一个 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
等等匹配的列。
我们可以用 base 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
,您可能有一些名称带有 dots/spaces,您也可以将 "\.prev"
和 "\.cur"
模式替换为 "\.prev$"
和 "\.cur$"
以确保我们在列名称的末尾匹配它们。
这是一个使用 dplyr
& stringr
语法的想法
library(dplyr); library(stringr)
names(d) <-
d %>% names() %>%
str_replace(".prev", ".1") %>%
str_replace(".cur", ".2")
干杯!
这里有一个选项gsubfn
library(gsubfn)
names(d) <- gsubfn("(\w+)", list(prev = 1, cur = 2), names(d))
names(d)
#[1] "ID" "Attribute1.1" "Attribute1.2"