Удалить часть имени столбца для нескольких столбцов - PullRequest
0 голосов
/ 29 января 2020

Я очищаю свои данные в формате tibble с помощью tidyverse. Я хочу избавиться от префикса в именах столбцов, которые были назначены системой, например:

x <- c("XYZ.date", "XYZ.region", "XYZ.region.europe.western"). 

Существует не так много разных префиксов, НО они не всегда имеют одинаковую длину. Я знаю, что могу переименовать их один по одному с переименовывать функцию, но есть ли способ избавиться от них всех сразу?

Не составить список из них.

Ответы [ 4 ]

2 голосов
/ 29 января 2020
foo <- function(x) gsub("^[^_]*_", "", x)

df %>%
    rename_all(foo)

Итак, здесь я пишу функцию, которая говорит, что удаляет все из строки до подчеркивания ("_"), а затем применяет эту функцию ко всем именам.

0 голосов
/ 29 января 2020

Это заменяет каждое вхождение всех символов вплоть до подчеркивания пустой строкой, а затем делает результат уникальным. Мы можем по желанию удалить %>% make.unique в первом случае или %>% as_tibble(.name_repair = "unique") во втором случае, если известно, что имена в любом случае будут уникальными. порядке.

library(dplyr)
library(tibble)
DF %>% rename_all(~ sub(".*_", "", .x)) %>% as_tibble(.name_repair = "unique")

Пример

Например, используя первый вышеупомянутый случай, добавьте префиксы к каждому имени встроенного anscombe, создавая DF, и примените вышеуказанное к этому в последняя строка кода ниже.

# set up a test data frame using builtin anscombe
DF <- setNames(anscombe, sub("(.)(.)", "\\1_\\2", names(anscombe)))
names(DF)
## [1] "x_1" "x_2" "x_3" "x_4" "y_1" "y_2" "y_3" "y_4"

DF %>% rename_all(~ sub(".*_", "", .x) %>% make.unique)
##     1  2  3  4   1.1  2.1   3.1   4.1
## 1  10 10 10  8  8.04 9.14  7.46  6.58
## 2   8  8  8  8  6.95 8.14  6.77  5.76
## ...etc...
0 голосов
/ 29 января 2020

Вы можете использовать следующий код, чтобы сделать это

df <- cbind(1,1:4)
colnames(df) <- c("x","Y")
colnames(df) <- paste("Sub", colnames(df), sep = "_")
df
#>      Sub_x Sub_Y
#> [1,]     1     1
#> [2,]     1     2
#> [3,]     1     3
#> [4,]     1     4
colnames(df)<-sub("^[^_]*_","",colnames(df))
df
#>      x Y
#> [1,] 1 1
#> [2,] 1 2
#> [3,] 1 3
#> [4,] 1 4

Создано в 2020-01-29 пакетом Представитель (v0.3.0)

0 голосов
/ 29 января 2020

В базе R, заменяя трехбуквенный префикс alphanumeri c с последующим подчеркиванием:

colnames(df) <- gsub("^[0-9A-Za-z]{3}_", "", colnames(df))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...