2016-05-30 3 views
1

В R, у меня есть несколько наборов данных, и я хочу использовать цикл для создания новых переменных (столбцы) в пределах каждого из них:R - Новая переменная в течение нескольких кадров данных в цикле

Всех dataframes имеют одинаковые name, так что это то, что я использую для их прокрутки. Вот некоторый псевдо-код, что я хочу сделать

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

В результате, я должен иметь то же dataframe с одной дополнительной колонкой (новаяПеременной), где все строки имеют значение "SomeString".

Если я использую eval(as.name(Name)) я могу вызвать dataframe Name без проблем, но ни один из обычных операторов кадра данных похоже на работу с конкретным вызовом (не < - присваивания, или $ или [[]])

Любые идеи были бы оценены, спасибо заранее!

ответ

1

Мы можем разместить наборы данных в list и создать новый столбец, перевернув через list с lapply. При необходимости исходные объекты dataframe могут быть обновлены с помощью list2env.

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

Или другой вариант с 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")) 
} 
+1

большие предложения, спасибо! Я использую решение 'assign' и отлично работает –

Смежные вопросы