2017-08-14 3 views
1

J'ai un jeu de données composé de paires de data.frames (qui sont des paires presque exactes, mais pas assez pour fusionner directement) dont j'ai besoin se munir ensemble. Heureusement, chaque df a un identifiant pour la date à laquelle il a été créé, qui peut être utilisé pour référencer la paire. Par exemple.Appeler un data.frame de global.env et ajouter une colonne avec le nom data.frame

df_0101 <- data.frame(a = rnorm(1:10), 
         b = runif(1:10)) 

df_0102 <- data.frame(a = rnorm(5:20), 
         b = runif(5:20)) 

df2_0101 <- data.frame(a2 = rnorm(1:10), 
         b2 = runif(1:10)) 

df2_0102 <- data.frame(a2 = rnorm(5:20), 
         b2 = runif(5:20)) 

Par conséquent, la première chose que je dois faire est de muter une nouvelle colonne sur chaque data.frame comprenant cette date (01_01/01_02/etc.) à savoir

df_0101 <- df_0101 %>% 
    mutate(df_name = "df_0101") 

mais évidemment dans un manière programmatique.

Je peux appeler tous les data.frame dans l'environnement mondial en utilisant

l_df <- Filter(function(x) is(x, "data.frame"), mget(ls())) 

head(l_df) 
$df_0101 
      a   b 
1 0.7588803 0.17837296 
2 -0.2592187 0.45445752 
3 1.2221744 0.01553190 
4 1.1534353 0.72097071 
5 0.7279514 0.96770448 

$df_0102 
      a   b 
1 -0.33415584 0.53597308 
2 0.31730849 0.32995013 
3 -0.18936533 0.41024220 
4 0.49441962 0.22123885 
5 -0.28985964 0.62388478 

$df2_0101 
      a2  b2 
1 -0.5600229 0.6283224 
2 0.5944657 0.7384586 
3 1.1284180 0.4656239 
4 -0.4737340 0.1555984 
5 -0.3838161 0.3373913 

$df2_0102 
      a2   b2 
1 -0.67987149 0.65352466 
2 1.46878953 0.47135011 
3 0.10902751 0.04460594 
4 -1.82677732 0.38636357 
5 1.06021443 0.92935144 

mais aucune idée comment puis tirer les noms de chaque df en une nouvelle colonne de chacun. Des idées?

Merci pour la lecture,

+0

double possible de [Ajouter une colonne contenant le nom de trame de données à une liste de trames de données] (https://stackoverflow.com/questions/27258538/add- colonne-contenant-données-cadre-nom-à-une-liste-de-données-cadres) –

Répondre

1

Nous pouvons utiliser Map dans base R

Map(cbind, names = names(l_df), l_df) 

Si nous allons par la voie tidyverse, puis

library(tidyverse) 
map2(names(l_df), l_df, ~(cbind(names = .x, .y))) 

En outre, cela peut être créé un seul jeu de données avec bind_rows

bind_rows(l_df, .id = "names")