Home > Software design >  Combine loop with Rbind
Combine loop with Rbind

Time:11-12

I'm trying to do a loop that appends through dataframes. I don't know how to call the dataframes in the loop when I use rbind. I tried with paste0 but didn't work. Here is a reproducible example:

library(metRology)

x <- c(1,2,3)
y <- c(1,2,3)

df_a_1 <- data.frame(x,y)
df_a_2 <- data.frame(x,y)

df_b_1 <- data.frame(x,y)
df_b_2 <- data.frame(x,y)

df_c_1 <- data.frame(x,y)
df_c_2 <- data.frame(x,y)

letters <- c("a", "b", "c")

#Loop
for (i in letters) {
  df_i <- rbind(paste0("df_", i "_1"), paste0("df", i, "_2"))
}

Thanks in advance!

CodePudding user response:

You can get and assign variables by their names assuming your data frames are stored in the R global environment:

library(tidyverse)

x <- c(1,2,3)
y <- c(1,2,3)

df_a_1 <- data.frame(x,y)
df_a_2 <- data.frame(x,y)

df_b_1 <- data.frame(x,y)
df_b_2 <- data.frame(x,y)

df_c_1 <- data.frame(x,y)
df_c_2 <- data.frame(x,y)

letters <- c("a", "b", "c")

for(l in letters) {
  prefix <- str_glue("df_{l}")
  res <- names(globalenv()) %>%
         keep(~ .x %>% str_detect(prefix)) %>%
         map(get) %>%
         reduce(rbind)
  assign(prefix, res)
}

df_a
#>   x y
#> 1 1 1
#> 2 2 2
#> 3 3 3
#> 4 1 1
#> 5 2 2
#> 6 3 3
df_b
#>   x y
#> 1 1 1
#> 2 2 2
#> 3 3 3
#> 4 1 1
#> 5 2 2
#> 6 3 3

Created on 2021-11-10 by the reprex package (v2.0.1)

  • Related