Я хочу переименовать имена столбцов для 4 кадров данных, используя цикл for

#r #dataframe #for-loop

Вопрос:

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

 RD1df=read.table(RD1url,skip=33)
RD2df=read.table(RD2url,skip=33)
RD3df=read.table(RD3url,skip=33)
RD4df=read.table(RD4url,skip=33)

Sites=list(RD1df,RD2df,RD3df,RD4df)
for(colnames in Sites) 
{colnames=c("Agency", "SiteId", 
"DateTime", "Measure", 
"DataValue")}'''
 

Это код, который я пытался запустить, и в цикле for нет сообщения об ошибке, но имена столбцов не меняются

Комментарии:

1. Находятся ли фреймы данных в списке или в глобальной среде?

2. @TarJae итак, у меня есть таблица as read., для создания которой я использовал paste0, потому что все они похожи на URL-адреса, а затем я поместил их в этот список, называемый Сайтами

Ответ №1:

Попробуйте это:

 NewNames <- function(x) {
  names(x)<- c("Agency", "SiteId", "DateTime", "Measure", "DataValue")
  return(x)
}

Sites <- lapply(Sites, NewNames)
 

или в качестве цикла for:

 for (i in seq_along(Sites)) {
  names(Sites[[i]]) <- c("Agency", "SiteId", "DateTime", "Measure", "DataValue")
}
 

Комментарии:

1. поскольку мне нужно использовать цикл for, могу ли я заменить цикл apply на цикл for? Похоже, я, возможно, захочу сохранить верхнюю часть, чтобы запустить цикл for, тхо? и в этом цикле for я бы хотел, чтобы он выглядел так: for (x на сайтах) {…

2. for (i in seq_along(Sites)) { names(Sites[[i]]) <- c("Agency", "SiteId", "DateTime", "Measure", "DataValue") }