2015-03-17 4 views
1

Только что открыл Plyr, и это спасло мне тонну линий, сочетающих несколько кадров данных, что отлично. НО У меня есть другая проблема переименования, которую я не могу понять.R Plyr Переименовать несколько столбцов в списке информационных кадров

У меня есть список, который содержит несколько кадров данных (это подмножество, так как в реальном списке есть 108).

> str(mydata) 
List of 4 
$ C11:'data.frame': 8 obs. of 3 variables: 
    ..$ X     : Factor w/ 8 levels "n >= 1","n >= 2",..: 1 2 3 4 5 6 7 8 
    ..$ n.ENSEMBLE.COVERAGE: num [1:8] 1 1 1 1 0.96 0.91 0.74 0.5 
    ..$ n.ENSEMBLE.RECALL : num [1:8] 0.88 0.88 0.88 0.88 0.9 0.91 0.94 0.95 
$ C12:'data.frame': 8 obs. of 3 variables: 
    ..$ X     : Factor w/ 8 levels "n >= 1","n >= 2",..: 1 2 3 4 5 6 7 8 
    ..$ n.ENSEMBLE.COVERAGE: num [1:8] 1 1 1 1 0.96 0.89 0.86 0.72 
    ..$ n.ENSEMBLE.RECALL : num [1:8] 0.91 0.91 0.91 0.91 0.93 0.96 0.97 0.98 
$ C13:'data.frame': 8 obs. of 3 variables: 
    ..$ X     : Factor w/ 8 levels "n >= 1","n >= 2",..: 1 2 3 4 5 6 7 8 
    ..$ n.ENSEMBLE.COVERAGE: num [1:8] 1 1 1 1 0.94 0.79 0.65 0.46 
    ..$ n.ENSEMBLE.RECALL : num [1:8] 0.85 0.85 0.85 0.85 0.88 0.9 0.92 0.91 
$ C14:'data.frame': 8 obs. of 3 variables: 
    ..$ X     : Factor w/ 8 levels "n >= 1","n >= 2",..: 1 2 3 4 5 6 7 8 
    ..$ n.ENSEMBLE.COVERAGE: num [1:8] 1 1 1 1 0.98 0.95 0.88 0.74 
    ..$ n.ENSEMBLE.RECALL : num [1:8] 0.91 0.91 0.91 0.91 0.92 0.94 0.95 0.98 

Что я действительно хочу достичь, так это для каждого фрейма данных, чтобы столбцы были добавлены в заголовок фрейма данных. Таким образом, в этом примере столбцы будут:

C11.X, C11.n.ENSEMBLE.COVERAGE & C11.n.ENSEMBLE.RECALL

C12.X, C12.n.ENSEMBLE.COVERAGE & C12.n.ENSEMBLE.RECALL

C13.X, C13.n.ENSEMBLE.COVERAGE & C13.n.ENSEMBLE.RECALL

C14.X, C14.n.ENSEMBLE.COVERAGE & C14.n.ENSEMBLE.RECALL

Может ли кто-нибудь предложить элегантный подход к переименованию столбцов?

ответ

3

Вот воспроизводимый пример с использованием набора данных радужки:

# produce a named list of data.frames as sample data: 
dflist <- split(iris, iris$Species) 
# store the list element names: 
n <- names(dflist) 
# rename the elements: 
Map(function(df, vec) setNames(df, paste(vec, names(df), sep = ".")), dflist, n) 
+0

Имеет смысл. Единственное, что конечная «карта», похоже, не изменяет имена в dflist, но выводит правильный dflist на консоль. – BarneyC

+0

@BarneyC, правильный. Используйте 'dflist <- Map (...)' для постоянного изменения данных. –

+1

Duh! Был очень длинный день. Спасибо, ужасно. Работает отлично. – BarneyC

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