2016-02-16 18 views
5

Vorrei creare una colonna anno per ogni dataframe in un elenco basato sui suoi nomi. Questa domanda has been asked before su SO ma purtroppo la risposta non aiuta. Quindi, è c'è un modo per farlo?Rownames come colonna nell'elenco dei dati

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")) 

risultato atteso:

[[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 
+0

Perché non aiuta? A che domanda ti riferisci? – franklin

risposta

2

possiamo usare Map

Map(cbind, mylist, year= lapply(mylist, rownames)) 
+1

Immagino che la tua risposta originale con 'Map' +' lapply' sarà meno efficiente –

+0

@docendodiscimus Non ho visto che hai postato una risposta simile. Lo cancellerò. – akrun

4

Ecco un'altra opzione:

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

Solo per divertimento, si potrebbe anche usare dplyr di add_rownames:

lapply(mylist, dplyr::add_rownames, 'year')