Enumeration through a list of data frames in R

I have a series of df1 df2 data frames where each data frame follows this structure:

 x <- c(1:5) y <- c(1:5) df1 <- data.frame("Row One"=x, "Row Two"=y) 

Example output for df1:

  Row.One Row.Two 1 1 2 2 3 3 4 4 5 5 

I put each data frame in a list dfList <- list(df1,df2...)

Now I want to loop through each data frame object in this list to replace the column names using the following command:

 a <- grep("One", colnames(df)) b <- grep("Two", colnames(df)) names(df)[a] <- "R1" names(df)[b] <- "R2" 

How can I structure a loop in R, so that no matter how many data frames are in the list object, the column name change commands above will be applied to each data frame?

+6
source share
3 answers
 > df1 <- data.frame("Row One"=x, "Row Two"=y) > df2 <- data.frame("Row Two"=y,"Row One"=x) > dfList <- list(df1,df2) > lapply(dfList, function(x) { names(x)[ grep("One", names(x))] <- "R1" names(x)[ grep("Two", names(x))] <- "R2" x} ) [[1]] R1 R2 1 1 1 2 2 2 3 3 3 4 4 4 5 5 5 [[2]] R2 R1 1 1 1 2 2 2 3 3 3 4 4 4 5 5 5 
+6
source

Just use length(dfList) ?

 for(i in 1:length(dfList)) { a <- grep("One", names(dfList[[i]])) ... #etc. } 

Using lapply will be faster.

 ChangeNames = function(Data) { a = grep("One", names(Data)) b = grep("Two", names(Data)) names(Data)[c(a,b)] <- c("R1", "R2") return(Data) } lapply(dfList, ChangeNames) #Returns list of renamed data frames. 
+4
source

Or use llply (from plyr ) or lapply like this:

 library(plyr) result_list <- llply(list_of_df, function(x) { # do the replacing return(x) }) 
+3
source

Source: https://habr.com/ru/post/956295/


All Articles