user3620237
user3620237

Reputation:

R - New variables over several data frames in a loop

In R, I have several datasets, and I want to use a loop to create new variables (columns) within each of them:

All dataframes have the same name structure, so that is what I am using to loop through them. Here is some pseudo-code with what I want to do

Name = Dataframe_1       #Assume the for-loop goes from Dataframe_1 to _10 (loop not shown)

#Pseudo-code 
eval(as.name(Name))$NewVariable <- c("SomeString")     #This is what I would like to do, but I get an error ("could not find function eval<-")

As a result, I should have the same dataframe with one extra column (NewVariable), where all rows have the value "SomeString".

If I use eval(as.name(Name)) I can call up the dataframe Name with no problem, but none of the usual data frame operators seem to work with that particular call (not <- assignment, or $ or [[]])

Any ideas would be appreciated, thanks in advance!

Upvotes: 1

Views: 548

Answers (1)

akrun
akrun

Reputation: 887118

We can place the datasets in a list and create a new column by looping over the list with lapply. If needed, the original dataframe objects can be updated with list2env.

lst <- mget(paste0('Dataframe_', 1:10))
lst1 <- lapply(lst, transform, NewVariable = "SomeString")
list2env(lst1, envir = .GlobalEnv())

Or another option is with assign

nm1 <- ls(pattern = "^Dataframe_\\d+")
nm2 <- rep("NewVariable", length(nm1))
for(j in seq_along(nm1)){
   assign(nm1[j], `[<-`(get(nm1[j]), nm2[j], value = "SomeString"))
 }

Upvotes: 2

Related Questions