2016-03-21 2 views
0

Пусть у меня есть список (песни1), который состоит кадры данных (DF1, df2, .., д.ф.н.):Unlisting кадр данных путем изменения имен столбцов данных фреймов

Каждый кадр данных состоит разное количество столбцов , В качестве примера

list1[[1]]=df1 

где df1:

x  y 
---- ----- 
45  6 
65  87 
12  90 

и

list1[[2]]=df2 

где df2:

a  b  c 
---- ---- ---- 
23  67  43 
71  13  8 
2  9  12 

Я хочу unlist песни1 в возвращается df1 и df2

df1:

a1  a2 
---- ----- 
45  6 
65  87 
12  90 

df2:

b1  b2  b3 
---- ---- ---- 
23  67  43 
71  13  8 
2  9  12 

А именно,

  • первый кадр данных (df1) будут заголовки как a1, a2, a3 .....

  • второй кадр данных (df2) будет заголовками как b1, b2, b3 .....

  • третий кадр данных (DF3) будут заголовки, как c1, c2, c3 .....

и идет дальше.

Как я могу это сделать в R? Я буду очень рад за любую помощь. Большое спасибо.

+1

Почему вы не хотите хранить их в списке? Посмотрите на 'list2env' и' setNames' за то, как это звучит, как вы просите. – A5C1D2H2I1M1N2O1R2T1

+0

@A Handcart And Mohair, так как я буду экспортировать каждый кадр данных в качестве файла excel, я хочу их заблокировать. – oercim

+0

Вы можете использовать 'lapply' вместо создания большого количества объектов в вашей рабочей области. В любом случае, 'list2env' будет делать то, что вы называете активностью« список ». – A5C1D2H2I1M1N2O1R2T1

ответ

3

Вот макет того, что я описывал в комментариях. Я не показываю list2env, потому что это кажется ненужным для вашей конечной цели.

Образец данных:

myList <- replicate(10, data.frame(v1 = 1:2, v2 = 3:4), FALSE) 

Переименование столбцов и записи данных в CSV-файлов:

lapply(seq_along(myList), function(x) { 
    FileName <- sprintf("%s.csv", letters[x]) 
    write.csv(setNames(myList[[x]], paste0(letters[x], 1:length(myList[[x]]))), 
      file = FileName, row.names = FALSE) 
}) 

Результат будет 10 CSV-файлов, названный a.csv, b.csv, и так далее, в котором a.csv будут иметь столбцы с именем «a1» ... «an».

3

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

for (i in seq_along(list1)) { 
    setNames(list1[[i]], paste0(letters[i], seq_along(list1[[i]]))) 
} 
2

Большое спасибо @A Handcraft And Mohair и @Gregor за ваше время. С предложениями @A Handcraft и Mohair мой код выглядит следующим образом:

list2<-list() 
for(i in seq_along(list1)) 
    { 
list2[[i]]<-setNames(list1[[i]], paste(letters[[i]],1:ncol(list1[[i]]))) 
} 
Смежные вопросы