Могу ли я создать data.frame в R из существующего data.frame, назначив список col.names?

У меня есть data.frame, где я назначаю каждому столбцу имя вектора переменных:

dat1 <- data.frame(a=1:5,b=1:5,c=1:5)

Я хочу создать новый data.frame, но вместо того, чтобы назначать каждый столбец по отдельности, я хочу назначить их все сразу. Например, если бы я хотел переименовать их все:

dat.new <- data.frame(paste(names(dat1),'1',sep='') = dat1)

Это явно не работает. Есть ли способ заставить его работать?

Я понимаю, что могу просто переименовать с помощью names(), но сценарий, в котором это действительно кажется полезным, - это объединение нескольких наборов данных с одинаковыми именами столбцов (и в которых я не хочу просто rbind):

dat1 <- data.frame(a=1:5,b=1:5,c=1:5)
dat2 <- data.frame(a=6:10,b=6:10,c=6:10)
dat.new <- data.frame(paste(names(dat1),'1',sep='') = dat1, paste(names(dat1),'2',sep='') = dat2)

person theforestecologist    schedule 19.11.2015    source источник
comment
Это то, что вы хотите: data.frame(setNames(dat1, paste0(names(dat1), "1")), setNames(dat2, paste0(names(dat1), "2")))   -  person Josh O'Brien    schedule 20.11.2015


Ответы (1)


library(dplyr)
library(tidyr)
library(magrittr)

Хорошо, вот первая часть:

dat2 = 
  dat1 %>%
  setNames(names(.) %>% 
             paste0("1") )

Вот вторая часть. Изменение формы немного сложное, но более гибкое, особенно если у вас уже есть идентификаторы строк с разным количеством строк:

list(dat1, dat2) %>%
  bind_rows(.id = "number") %>%
  group_by(number) %>%
  mutate(id = 1:n()) %>%
  gather(variable, value, -number, -id) %>%
  unite(new_variable, variable, number) %>%
  spread(new_variable, value)
person bramtayl    schedule 19.11.2015