我的数据框是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)循环进行思考,但是我对编程一般不太熟悉以解决这个问题。
由于
答案 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"