Как переименовать все имена столбцов в Tibble, передав символьный вектор? - PullRequest
1 голос
/ 12 февраля 2020

У меня есть столбец с именем X из нескольких столбцов (более 500), которые названы в формате "X" + целое число. Тиббл выглядит следующим образом.

# A tibble: 7,352 x 561
      X1       X2     X3     X4     X5     X6        
    <dbl>    <dbl>  <dbl>  <dbl>  <dbl>  <dbl>  
 1 0.289 -0.0203  -0.133 -0.995 -0.983 -0.914 
 2 0.278 -0.0164  -0.124 -0.998 -0.975 -0.960 

В txt-файле не было имен столбцов, но они находятся в другом txt-файле, который я прочитал в другой тиббл. Этот столбик имеет размер 561x1.

Что я хотел сделать, так это переименовать все имена столбцов таблицы x, используя значения строк (= преобразование тега в символьный вектор с именем y).

Я пробовал функцию dplyr rename_all без результата.

Вот пример, который, я считаю, довольно близок к реальной работе, но я не совсем понимаю, как работать с функцией list

> rename_all(x,list(paste0(y)))

Приведенная выше команда в командной строке RStudio выдает следующее сообщение об ошибке:

Error in get(.x, .env, mode = "function") : 
  object 'tBodyAcc-mean()-X' of mode 'function' was not found

tBodyAcc-mean()-X - это значение в первой строке символьного вектора y .

Я пытался погуглить сообщение об ошибке, но до сих пор не знаю, что его вызывает и как мне изменить команду rename_all , чтобы она заработала.

Любая помощь очень ценится!

Ответы [ 2 ]

3 голосов
/ 12 февраля 2020

Вы можете использовать:

library(dplyr)

x %>% rename_all(~y %>% pull(col))
#     a       b      c      d      e      f
#1 0.289 -0.0203 -0.133 -0.995 -0.983 -0.914
#2 0.278 -0.0164 -0.124 -0.998 -0.975 -0.960

Или просто в базе R:

names(x) <- y$col

, где col - имя столбца в y кадре данных.

данные

x <- structure(list(X1 = c(0.289, 0.278), X2 = c(-0.0203, -0.0164), 
X3 = c(-0.133, -0.124), X4 = c(-0.995, -0.998), X5 = c(-0.983, 
-0.975), X6 = c(-0.914, -0.96)), class = "data.frame", row.names = c("1", "2"))
y <- tibble(col = letters[1:6])
0 голосов
/ 24 февраля 2020

Используя rename_at, вы можете написать следующий код:

x1 <- x %>% 
        rename_at(., names(x), funs(c(letters[1:6])))
...