Переименование нескольких столбцов в R - PullRequest
1 голос
/ 20 февраля 2020

Надеюсь, это не повторяющийся вопрос, так как я не смог найти ответ, который мне был интересен. У меня 70 столбцов, и я хочу их переименовать. В качестве примера я знаю несколько подходов:

df1<-setmames (df1, c("BA1", "MA2", "NA3"...), c( "AB1","QB2","Q3"...))

Но эти подходы бесполезны, так как у нас очень большие сценарии. Интересно, могли бы мы сделать это небольшим скриптом, используя tidyverse?

В качестве примера я могу показать три столбца, предполагая, что у меня есть эта таблица:

AB1	AB2	AB3
12	13	13
12	13	13
12	11	13
12	13	17
12	13	16

Я хочу получить эту таблицу

MZ1	MZ2	MZ3
12	13	13
12	13	13
12	11	13
12	13	17
12	13	16

Учитывая, что это только пример, у меня есть 70 столбцов.

1 Ответ

4 голосов
/ 20 февраля 2020

Мы можем использовать имена индексов или столбцов

names(df1)[1:70] <- v1

, где

 v1<- c("AB1", "QB2", ...)

С dplyr мы можем использовать rename_at

library(dplyr)
library(stringr)
df1 <- df1 %>%
          rename_at(1:70, ~ v1)

Если мы переименовываем столбцы, начинающиеся с `AB '

names(df1)
#[1] "x1"  "x2"  "AB1" "AB2"

df1 %>%
   rename_at(vars(matches('^AB\\d+$')), ~ str_replace(., 'AB', 'MZ'))
#  x1 x2        MZ1       MZ2
#1  1  6 -0.5458808 0.6048889
#2  2  7  0.5365853 0.3707349
#3  3  8  0.4196231 0.6716903
#4  4  9 -0.5836272 0.6729823
#5  5 10  0.8474600 0.3204306

Или в base R

i1 <- grep("^AB\\d+$", names(df1))
names(df1)[i1] <- sub("AB", "MZ", names(df1)[i1])

Обновляем

df2 <- df2 %>%
         rename_at(vars(matches("^AB\\d+$")), ~ str_replace(., "AB", "MZ"))
df2
#  MZ1 MZ2 MZ3
#1  12  13  13
#2  12  13  13
#3  12  11  13
#4  12  13  17
#5  12  13  16

data

set.seed(24)
df1 <- data.frame(x1 = 1:5, x2 = 6:10, AB1 = rnorm(5), AB2 = runif(5))

исходные значения данных

df1
#  x1 x2        AB1       AB2
#1  1  6 -0.5458808 0.6048889
#2  2  7  0.5365853 0.3707349
#3  3  8  0.4196231 0.6716903
#4  4  9 -0.5836272 0.6729823
#5  5 10  0.8474600 0.3204306

Обновлены данные из сообщения ОП

df2 <- structure(list(AB1 = c(12L, 12L, 12L, 12L, 12L), AB2 = c(13L, 
 13L, 11L, 13L, 13L), AB3 = c(13L, 13L, 13L, 17L, 16L)),
  class = "data.frame", row.names = c(NA, -5L))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...