创建一个简单的动物园系列,从YYYY-MM-TT到YYYY-MM-TT

时间:2018-04-11 20:06:44

标签: r xts zoo

你可以帮助我解决以下问题吗? 我有一个大的excel文件,看起来像这样:

Click here to view a screenshot for the excel file

想象一下这些是四家不同公司的股价。 在第一列,您可以看到YY.MM.DD和2010年几天的日期 在第一行你看到公司 - 没有。像101,102 ...... 因此,公司101在今年的第一天股票价格为4,555美元。

现在我必须在R中为eventstudies包创建一个动物园系列。

Click here to view a screenshot for the description

创建这样的格式的最快方法是什么?我有很多尝试,但我没有得到正确的解决方案。值必须如下所示:

Click here to view a screenshot for the final zoo series

日期现在格式为YYYY-MM-DD。如您所见,我们在此zoo系列中有一些带负值的值。因此它显示了从第1天到第2天的变化。

我的最终zoo系列将为公司101显示从2010-01-04开始的每天+1值。

3 个答案:

答案 0 :(得分:0)

要转换日期,请使用

new_data_variable <- as.Date(old_date_variable, "%m.%d.%y")

如果你想重塑数据,有很多选择,但我不确定你在这方面需要什么。

答案 1 :(得分:0)

我认为最简单的方法是将as.xts()与seq.Date()结合使用,如下所示:

startdate <- as.Date("2010-01-01")
enddate <- as.Date("2010-12-31")
timeseries <- as.xts(x = seq.Date(from = startdate, to = enddate, by = "1 day"))

修改

也许这更接近你想要的东西:

x <- readxl::read_excel("filename.xlsx")
x$X__1 <- lubridate::dmy(x$X__1)
as.zoo(x)

答案 2 :(得分:0)

简单:

library(zoo)
library(openxlsx)

sheet <- read.xlsx("<path to your excel doc.xlsx>")
dates <- as.Date(sheet[[1]], format = "%m.%d.%y") 
# if this doesn't work, replace 1 with your column name

startdate <- min(dates)
enddate <- max(dates)
dates <- seq(startdate, enddate, by = "day")
dates_zoo <- as.xts(dates)