Переименование столбцов в соответствии с вектором внутри трубы - PullRequest
0 голосов
/ 18 ноября 2018

У меня есть data.frame df со столбцами A и B:

df <- data.frame(A = 1:5, B = 11:15)

Есть еще один data.frame, df2, который я строю с помощью различных вычислений, которыев итоге получаются общие имена столбцов X1 и X2, которые я не могу контролировать напрямую (потому что он проходит через матрицу в одной точке).В итоге получается что-то вроде:

mtrx <- matrix(1:10, ncol = 2)
mtrx %>% data.frame()

Я бы хотел переименовать столбцы в df2 так, чтобы они совпадали с df.Я мог бы, конечно, сделать это после того, как я закончу сборку df2 с простым присваиванием:

names(df2)<-names(df)

Мой вопрос - есть ли способ сделать это прямо в трубе?Я не могу использовать dplyr :: rename, потому что они должны быть в форме newname = oldname, и я не могу векторизовать это.То же самое относится и к самому вызову data.frame - я не могу просто дать ему вектор имен столбцов, насколько я могу судить.Есть ли другой вариант, который я пропускаю?Я надеюсь на что-то вроде

mtrx %>% data.frame() %>% rename(names(df))

, но это не работает - выдает ошибку Error: All arguments must be named.

Ура!

Ответы [ 2 ]

0 голосов
/ 18 ноября 2018

Мы можем использовать rename_all от tidyverse

library(tidyverse)
mtrx %>% 
    as.data.frame %>% 
    rename_all(~ names(df))
#   A  B
# 1 1  6
# 2 2  7
# 3 3  8
# 4 4  9
# 5 5 10
0 голосов
/ 18 ноября 2018

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

mtrx %>% 
  data.frame() %>% 
  setNames(., nm = names(df))
#  A  B
#1 1  6
#2 2  7
#3 3  8
#4 4  9
#5 5 10

Или использовать purrr эквивалент set_names

mtrx %>% 
  data.frame() %>% 
  purrr::set_names(., nm = names(df))

Третий вариант - "names<-"

mtrx %>% 
  data.frame() %>% 
  "names<-"(names(df))
...