И у Спейсмена, и у Джошуа очень хорошие очки.Поскольку в любой момент времени Stata имеет только один набор данных в памяти, я бы предложил добавить переменные в фрейм данных (который также является своего рода списком), а не в глобальную среду (см. Ниже).
Но, честно говоря, более R-ишный способ сделать это - сохранить ваши факторы факторов вместо имен переменных.
Я делаю некоторые данные, так как считаю, что они есть в вашей версии R сейчас(по крайней мере, я на это надеюсь ...)
Data <- data.frame(
popA1989 = 1:10,
popB1989 = 10:1,
popC1989 = 11:20,
popD1989 = 20:11
)
Trend <- replicate(11,runif(10,-0.1,0.1))
Затем вы можете использовать функцию stack()
для получения кадра данных, в котором есть коэффициент pop
и числовая переменная year
newData <- stack(Data)
newData$pop <- substr(newData$ind,4,4)
newData$year <- as.numeric(substr(newData$ind,5,8))
newData$ind <- NULL
В этом случае заполнить фрейм данных довольно просто:
for(i in 1:11){
tmp <- newData[newData$year==(1988+i),]
newData <- rbind(newData,
data.frame( values = tmp$values*Trend[,i],
pop = tmp$pop,
year = tmp$year+1
)
)
}
В этом формате вы найдете большинство команд R (выборки за несколько лет из одной совокупности, эффекты моделированияили то и другое, ...) намного проще выполнить позже.
И если вы настаиваете, вы все равно можете создать широкий формат с помощью unstack()
unstack(newData,values~paste("pop",pop,year,sep=""))
Адаптация ответа Джошуа для добавления столбцов в фрейм данных:
for(L in LETTERS[1:4]) {
for(i in 1990:2000) {
new <- paste("pop",L,i,sep="") # create name for new variable
old <- get(paste("pop",L,i-1,sep=""),Data) # get old variable
trend <- Trend[,i-1989] # get trend variable
Data <- within(Data,assign(new, old*(1+trend)))
}
}