Переименуйте суффикс части имени столбца, но оставьте то же самое - PullRequest
0 голосов
/ 11 декабря 2018

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

Например, если у меня есть 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 ]

0 голосов
/ 11 декабря 2018

Вот идея использования синтаксиса dplyr & stringr

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

Приветствия!

0 голосов
/ 12 декабря 2018

Вот вариант с gsubfn

library(gsubfn)
names(d) <- gsubfn("(\\w+)", list(prev = 1, cur = 2), names(d))
names(d)
#[1] "ID"           "Attribute1.1" "Attribute1.2"
0 голосов
/ 11 декабря 2018

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...