Loop para mudar nomes de colunas em data.frames

Pessoal, Quero rodar um loop que, em um dos comandos, adicione números em sequência (e.g. 1, 2, 3) apenas à segunda coluna de várias bases de dados. No meu caso, imaginei que precisaria usar um loop dentro de outro, mas não funcionou. (Ainda estou começando no R, como vocês podem perceber). Segue um exemplo mais simples com a base "iris": data1 <- iris data2 <- iris data3 <- iris list_data <- list(data1, data2, data3) list_emp <- vector("list", length(list_data)) for(i in 1:length(list_data)){ file <- list_data[[i]] Sepal.Length <- tapply(file$Sepal.Length, file$Species, length) newData <- as.data.frame(Sepal.Length) newData <- cbind(Species = rownames(newData), newData) rownames(newData) <- NULL list_emp[[i]] <- newData for(j in 1:3){ colnames(list_emp[[i]][2]) <- paste("Sepal.Length", j, sep = "_") # Nao funciona } rm(Sepal.Length, file, i, newData) } O loop deveria retornar uma lista com data frames na forma: # Species | Sepal.Length_1 # setosa | 50 # versicolor | 50 # virginia | 50 # Species | Sepal.Length_2 # setosa | 50 # versicolor | 50 # virginia | 50 # Species | Sepal.Length_3 # setosa | 50 # versicolor | 50 # virginia | 50 Alguém pode me ajudar a corrigir a linha que não funciona? Além disso, aceito sugestões que não sejam com for loops. Abs., André -- *André Vieira* Mestre, Sociologia, UFMG (M.Sc., Sociology, UFMG) Bacharel, Sociologia, UnB (B.Sc., Sociology, UnB) Licenciado, Sociologia, UnB (B.Ed., Sociology, UnB) GitHub <http://github.com/ahpvieira> Currículo Lattes <http://lattes.cnpq.br/6721713322923268> Skype: andre.hpv

André, Minha sugestão não exatamente sua resposta, mas pode ajudar: data(iris) list.data <- lapply(X = list('1' = iris, '2' = iris, '3' = iris), FUN = function(data) with(data, tapply(Sepal.Length, Species, length))) Att, FH 2015-08-20 15:09 GMT-05:00 André Vieira <andrehpv@gmail.com>:
Pessoal,
Quero rodar um loop que, em um dos comandos, adicione números em sequência (e.g. 1, 2, 3) apenas à segunda coluna de várias bases de dados. No meu caso, imaginei que precisaria usar um loop dentro de outro, mas não funcionou. (Ainda estou começando no R, como vocês podem perceber).
Segue um exemplo mais simples com a base "iris":
data1 <- iris data2 <- iris data3 <- iris
list_data <- list(data1, data2, data3) list_emp <- vector("list", length(list_data))
for(i in 1:length(list_data)){ file <- list_data[[i]] Sepal.Length <- tapply(file$Sepal.Length, file$Species, length) newData <- as.data.frame(Sepal.Length) newData <- cbind(Species = rownames(newData), newData) rownames(newData) <- NULL list_emp[[i]] <- newData for(j in 1:3){ colnames(list_emp[[i]][2]) <- paste("Sepal.Length", j, sep = "_") # Nao funciona } rm(Sepal.Length, file, i, newData) }
O loop deveria retornar uma lista com data frames na forma:
# Species | Sepal.Length_1 # setosa | 50 # versicolor | 50 # virginia | 50
# Species | Sepal.Length_2 # setosa | 50 # versicolor | 50 # virginia | 50
# Species | Sepal.Length_3 # setosa | 50 # versicolor | 50 # virginia | 50
Alguém pode me ajudar a corrigir a linha que não funciona? Além disso, aceito sugestões que não sejam com for loops.
Abs.,
André
-- *André Vieira* Mestre, Sociologia, UFMG (M.Sc., Sociology, UFMG) Bacharel, Sociologia, UnB (B.Sc., Sociology, UnB) Licenciado, Sociologia, UnB (B.Ed., Sociology, UnB) GitHub <http://github.com/ahpvieira> Currículo Lattes <http://lattes.cnpq.br/6721713322923268> Skype: andre.hpv
_______________________________________________ R-br mailing list R-br@listas.c3sl.ufpr.br https://listas.inf.ufpr.br/cgi-bin/mailman/listinfo/r-br Leia o guia de postagem (http://www.leg.ufpr.br/r-br-guia) e forneça código mínimo reproduzível.
participantes (2)
-
André Vieira
-
FHRB Toledo