如何合并Dates和包含在唯一csv中的值

时间:2013-04-10 15:31:41

标签: r excel csv time-series zoo

我们有一个csv文件,其中包含Excel格式的日期,以及针对Manager A和Manager B的Nav,如下所示:

Date,Manager A,Date,Manager B
41346.6666666667,100,40932.6666666667,100
41347.6666666667,100,40942.6666666667,99.9999936329992
41348.6666666667,100,40945.6666666667,99.9999936397787
41351.6666666667,100,40946.6666666667,99.9999936714362
41352.6666666667,100,40947.6666666667,100.051441180137
41353.6666666667,100,40948.6666666667,100.04877283951
41354.6666666667,100.000077579585,40949.6666666667,100.068400298752
41355.6666666667,100.00007861475,40952.6666666667,100.070263374822
41358.6666666667,100.000047950872,40953.6666666667,99.9661095940006
41359.6666666667,99.9945012295984,40954.6666666667,99.8578245935173
41360.6666666667,99.9944609274138,40955.6666666667,99.7798031949116
41361.6666666667,99.9944817907402,40956.6666666667,100.029523604978
41366.6666666667,100,40960.6666666667,100.14859511024
41367.6666666667,99.4729804387476,40961.6666666667,99.7956029017769
41368.6666666667,99.4729804387476,40962.6666666667,99.7023420799123
41369.6666666667,99.185046151864,40963.6666666667,99.6124531927299
41372.6666666667,99.1766469096966,40966.6666666667,99.5689030038018
41373.6666666667,98.920738006398,40967.6666666667,99.5701493637685
,,40968.6666666667,99.4543885041996
,,40969.6666666667,99.3424528379521

我们想要创建一个具有以下结构的动物园对象[日期,经理A导航,经理B导航]。

用以下内容读取csv文件后

data = read.csv("...", header=TRUE, sep=",")

我们设置了一个用于拆分对象的索引,并使用lapply来拆分

INDEX <- seq(1, by = 2, length = ncol(data) / 2)

data.zoo <- lapply(INDEX, function(i, data) data[i:(i+1)], data = zoo(data))

我坚持认为Dates是Excel格式并且不知道如何解决这些问题。问题是否以正确的方式设定?

1 个答案:

答案 0 :(得分:1)

如果您只想将日期转换为正确的日期,则可以轻松完成。你需要知道的是起源日期。您的数字代表自原始日期以来经过的整数和小数天数。通常这是1990年1月0日!去图,但要小心,因为我不认为情况总是这样。你可以试试这个......

# Excel origin is day 0 on Jan 0 1900, but treats 1900 as leap year so...
data$Date <- as.Date( data$Date , origin = "1899/12/30")
data$Date.1 <- as.Date( data$Date.1 , origin = "1899/12/30")
# For more info see ?as.Date

如果您对保持时间感兴趣,可以使用as.POSIXct,但您还必须指定时区(默认为UTC);

data$Date <- as.POSIXct(data$Date, origin = "1899/12/30" )
head(data)
#                    Date Manager.A     Date.1 Manager.B
#   1 2013-03-13 16:00:00       100 2012-01-24 100.00000
#   2 2013-03-14 16:00:00       100 2012-02-03  99.99999
#   3 2013-03-15 16:00:00       100 2012-02-06  99.99999
#   4 2013-03-18 16:00:00       100 2012-02-07  99.99999
#   5 2013-03-19 16:00:00       100 2012-02-08 100.05144
#   6 2013-03-20 16:00:00       100 2012-02-09 100.04877