2015-11-19 7 views
0

У меня есть data.frame где я задаю каждый column.name вектор переменных:Могу ли я создать data.frame в R из существующего data.frame, назначив список col.names?

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(), но сценарий, когда это на самом деле кажется полезным, если объединение нескольких наборов данных, которые разделяют одни и те же col.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) 
+0

Является ли это то, что вы хотите: 'data.frame (setNames (DAT1, paste0 (имена (DAT1) , "1")), setNames (dat2, paste0 (имена (dat1), "2"))) ' –

ответ

0
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) 

 Смежные вопросы

  • Нет связанных вопросов^_^