2013-11-13 8 views
9

У меня есть список фреймов данных, столбцы которых имеют имена.Назначить имена столбцов в список фреймов данных

Если я хочу изменить имена блоков данных в списке (а не имена родительского списка), я не могу получить к ним доступ напрямую через имена() или colnames(), вместо этого я должен использовать lapply() для получить имена.

Однако, если я использую lapply для возврата имен столбцов, то они существуют только в вызове lapply, и я не могу назначать новые имена в список в родительской среде.

Вот MWE ниже:

1/Создать объект

require(xts) 
data(sample_matrix) 
x <- as.xts(sample_matrix) 
y <- lapply(split(x, "months"), data.frame) 

2/Имена столбцов в dataframes не являются непосредственно доступными

names(y) 

NULL

colnames(y) 

NULL

3/Мы можем попытаться использовать lapply

lapply(y, function(z) names(z) <- c('Op', 'Hi', 'Lo', 'Clo')) 

[[1]]

[1] «Op «Привет» «Ло» «Кло» ...

Но на самом деле он не присвоил имена объекту.

ответ

16

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

lapply(y , setNames , nm = c('Op', 'Hi', 'Lo', 'Clo')) 
#[[1]] 
#     Op  Hi  Lo  Clo 
#2007-01-02 50.03978 50.11778 49.95041 50.11778 
#2007-01-03 50.23050 50.42188 50.23050 50.39767 
#2007-01-04 50.42096 50.42096 50.26414 50.33236 
#  ...  ...  ...  ...  ... 

Цитирование непосредственно со страницы справки:

Это удобная функция, которая устанавливает имена на объект и возвращает объект. Это наиболее полезно в конце определения функции, где создается объект, который будет возвращен, и предпочитает не хранить его под именем, чтобы имена могли быть назначены.

+2

Nice, никогда не видел эту функцию раньше. – lilster

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