使用向量作为新变量的输入

时间:2015-07-02 02:00:52

标签: r loops

我的数据框是SPData,其中包括过去25年(每年约250天)的S& P500的日期,开盘价,收盘价和交易量。 另外,我有SPData$Year,它只是一个向量,从1990年到2015年,以数字方式存储日期列中的年份。

library(dplyr)
SPData1990 <- filter(SPData, Year == 1990)

产生了一个约250个观测值的数据框,1990年每个交易日一个。我已经做了25年。

有没有办法创建一个公式,将每年对应的所有其他数据保存为新的数据框(SPData1991,SPData 1992,SPData1993等)?我试图通过对应于公式years <- unique(SPData$Year, FALSE)的for(i in years)循环进行思考,但是我对编程一般不太熟悉以解决这个问题。

由于

2 个答案:

答案 0 :(得分:5)

感谢@ user20650 ......

# reproducible example!
set.seed(123)
year_range = 1990:2014
SPData <- data.frame(Year=sample(year_range,1000,replace=TRUE),
                     Sales=runif(1000,min=100,max=200) )

# split the list into data frames on "SPDataYYYY" and store in global environment
list2env(split(SPData, paste0("SPData",SPData$Year)),
         envir = .GlobalEnv)
ls()
# [1] "SPData"     "SPData1990" "SPData1991" "SPData1992" "SPData1993" "SPData1994"
# [7] "SPData1995" "SPData1996" "SPData1997" "SPData1998" "SPData1999" "SPData2000"
# [13] "SPData2001" "SPData2002" "SPData2003" "SPData2004" "SPData2005" "SPData2006"
# [19] "SPData2007" "SPData2008" "SPData2009" "SPData2010" "SPData2011" "SPData2012"
# [25] "SPData2013" "SPData2014" "year_range"

答案 1 :(得分:3)

您可以使用split执行此操作,然后根据拆分因子的级别进行分配。下面我使用mtcars进行说明,但您可以在第一行(myDf)中替换数据集,在第二行(splitVar)中替换年份变量。

myDf <- mtcars
splitVar <- factor(myDf$gear)
levelsVar <- levels(splitVar)
splitDataFrame <- split(myDf, splitVar)
for (i in 1:length(levelsVar)) {
    assign(paste0("newDataFrameGear", levelsVar[i]), data.frame(splitDataFrame[i]))
}
ls(pattern = "^newData")
## [1] "newDataFrameGear3" "newDataFrameGear4" "newDataFrameGear5"