Rownames as a column in the data list

I would like to create a column year for each data frame in a list based on its names. This question has been asked before on SO, but unfortunately the answer does not help. So is there a way to do this?

mylist <- list(structure(list(a = 1:10), .Names = "a", row.names = 1991:2000, class = "data.frame"), structure(list(a = 1:10), .Names = "a", row.names = 1992:2001, class = "data.frame")) 

Expected Result:

 [[1]] a year 1991 1 1991 1992 2 1992 1993 3 1993 1994 4 1994 1995 5 1995 1996 6 1996 1997 7 1997 1998 8 1998 1999 9 1999 2000 10 2000 [[2]] a year 1992 1 1992 1993 2 1993 1994 3 1994 1995 4 1995 1996 5 1996 1997 6 1997 1998 7 1998 1999 8 1999 2000 9 2000 2001 10 2001 
+5
source share
2 answers

We can use Map

 Map(cbind, mylist, year= lapply(mylist, rownames)) 
+2
source

Here is another option:

 lapply(mylist, function(df) transform(df, year = rownames(df))) 

Just for fun, you can also use the dplyr add_rownames function:

 lapply(mylist, dplyr::add_rownames, 'year') 
+4
source

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


All Articles