Переименуйте суффикс части имени столбца, но оставьте то же самое

Сейчас я повторяю слияние, потому что я плохо назвал столбцы, однако я хотел бы знать, как сопоставить суффикс имени столбца и переименовать эту часть столбца, оставив остальное таким же.

Например, если у меня есть data.frame (тоже может быть data.table, не имеет значения - я мог бы преобразовать его):

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

Теперь представьте, что есть сотни столбцов, похожих на столбцы 2 и 3 из моего образца DT. Как бы я пройти и обнаружить все столбцы, заканчивающиеся на ".prev" изменить на ".1" и все столбцы, заканчивающиеся на ".cur" изменить на ".2"?

Итак, имена новых столбцов будут такими: ID (Без изменений), Attribute1.1, Attribute1.2 и так далее для столько столбцов, которые совпадают.

3 ответа

Решение

С базой 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$" чтобы убедиться, что мы сопоставляем их в конце имен столбцов.

Вот идея использования 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"
Другие вопросы по тегам