2

I am very new in R, and I would be very grateful for any help!

I have created 12 dataframes, named b1, b2, ... b12. Now in each of the dataframes I want to create a variable "Orig" indicating a number of the dataframe.

In other words, I want to write a loop which does the same as this code:

b1$Orig <- 1
b2$Orig <- 2
...
b12$Orig <- 12

or as this one:

b1 <- b1 %>%
  mutate(Orig = 1)
...
b12 <- b12 %>%
  mutate(Orig = 12)

I have tried this:

for (i in 1:n){
  paste0("b", as.character(i))[[Orig]] <- i
  }

But get an error:

Error in paste0("b", as.character(i))[[Orig]] <- i : target of assignment expands to non-language object

So I guess I need to create a vector Orig first in the loop, but <i dont know how.

I have also tried this:

for (i in 1:n){
  assign (paste0("b", as.character(i)), paste0("b", as.character(i)) %>% mutate(Orig = i))
  }

But get an error:

Error in UseMethod("mutate") : no applicable method for 'mutate' applied to an object of class "character"

Here I have tried to use as.data.frame function

for (i in 1:n){
  assign (paste0("b", as.character(i)), as.data.frame(paste0("b", as.character(i))) %>% mutate(Orig = i))
  }

, but as result I get only (1x1) dataframes with a single number.

I wonder what else could I do? Thanks a lot!

1
  • 1
    A simple dataframe counter would be to just store the dataframes in a list and reference a specific dataframe by its list index number. e.g. blist <- list(b1, b2, ... b12) blist[[4]] is the dataframe b4 Commented Mar 17, 2021 at 19:32

1 Answer 1

1

Let's create a simple example:

b1 <- data.frame(a=1:4, b=5:8)
B <- list(b1, b2, b3, b4)

Now to add the Orig column use lapply

B2 <- lapply(1:4, function(x) data.frame(Orig=x, B[[x]]))
B2
# [[1]]
#   Orig a b
# 1    1 1 5
# 2    1 2 6
# 3    1 3 7
# 4    1 4 8
# 
# . . . .
# 
# [[4]]
#   Orig a b
# 1    4 1 5
# 2    4 2 6
# 3    4 3 7
# 4    4 4 8

If you now want to combine the labeled data frames into a single one:

B3 <- do.call(rbind, B2)
Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.