R:将数据转换为 xts object
R: converting data to an xts object
我有一个 .csv 文件,其中包含 SIZ5(白银期货)的高频数据,我正在尝试将其导入 xts object,以便我可以使用 "highfrequency" 中的一些函数包裹。
我使用 read.csv 函数将数据加载到 R 上。在完成删除 Nas 和更改时间格式的所有必要修复后。
f<-read.csv(file = "SIZ5_20150918_ob2.csv",header = FALSE,sep = "",col.names = c("DateTime","Seq","BP","BQ","BO","AP","AQ","AO","BP1","BQ1","BO1","AP1","AQ1","AO1","BP2","BQ2","BO2","AP2","AQ2","AO2","BP3","BQ3","BO3","AP3","AQ3","AO3","BP4","BQ4","BO4","AP4","AQ4","AO4","BP5","BQ5","BO5","AP5","AQ5","AO5","BP6","BQ6","BO6","AP6","AQ6","AO6","BP7","BQ7","BO7","AP7","AQ7","AO7","BP8","BQ8","BO8","AP8","AQ8","AO8","BP9","BQ9","BO9","AP9","AQ9","AO9"),nrows = 600000)
f$DateTime=as.POSIXct(f$DateTime/(10^9), origin="1970-01-01") #timestamp conversion
good1<-complete.cases(f)
f2<-f[good1,]
我的结果是:
DateTime Seq BP BQ BO AP AQ AO BP1 BQ1 BO1 AP1 AQ1 AO1 BP2 BQ2 BO2 AP2 AQ2 AO2 BP3 BQ3 BO3 AP3 AQ3 AO3 BP4 BQ4 BO4 AP4
1 2015-09-17 22:00:00 11539422 15110 1 1 15120 4 3 15105 1 1 15125 17 2 15100 4 3 15130 8 2 15095 7 6 15135 3 1 15090 33 3 15140
2 2015-09-17 22:00:00 11539422 15110 1 1 15120 4 3 15105 1 1 15125 17 2 15100 4 3 15130 8 2 15095 7 6 15135 3 1 15090 33 3 15140
3 2015-09-17 22:00:00 11539422 15110 1 1 15120 2 2 15105 1 1 15125 17 2 15100 4 3 15130 8 2 15095 7 6 15135 3 1 15090 33 3 15140
4 2015-09-17 22:00:00 11539479 15115 1 1 15120 2 2 15110 1 1 15125 17 2 15105 1 1 15130 8 2 15100 4 3 15135 3 1 15095 7 6 15140
5 2015-09-17 22:00:00 11539480 15115 2 2 15120 2 2 15110 1 1 15125 17 2 15105 1 1 15130 8 2 15100 4 3 15135 3 1 15095 7 6 15140
6 2015-09-17 22:00:00 11539482 15115 2 2 15120 2 2 15110 1 1 15125 17 2 15105 1 1 15130 8 2 15100 4 3 15135 3 1 15095 7 6 15140
*为了简洁起见,我省略了几列
然后:
> as.xts(f2)
Error in as.POSIXlt.character(x, tz, ...) :
character string is not in a standard unambiguous format
所以我尝试了:
fxts<-xts(f2[,-1],order.by = f2[,1])
但这就是我得到的:
Seq BP BQ BO AP AQ AO BP1 BQ1 BO1 AP1 AQ1 AO1 BP2 BQ2 BO2 AP2 AQ2 AO2 BP3 BQ3 BO3 AP3 AQ3 AO3 BP4 BQ4 BO4 AP4 AQ4 AO4
1970-01-01 12247553 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
1970-01-01 12247553 15025 1 1 15030 11 9 15020 10 10 15035 19 18 15015 18 17 15040 22 19 15010 27 21 15045 23 17 15005 14 13 15050 36 28
1970-01-01 12836196 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
1970-01-01 12836196 15240 1 1 15245 6 5 15235 12 11 15250 11 11 15230 10 9 15255 13 12 15225 12 11 15260 18 16 15220 13 12 15265 16 13
1970-01-01 14167856 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
1970-01-01 14167856 15225 11 9 15230 4 4 15220 19 19 15235 14 14 15215 32 26 15240 27 22 15210 29 25 15245 21 17 15205 24 19 15250 28 22
*再次省略最后几列
首先,时间列没有 header 然后它们都是 1970-01-01(origin),没有任何关联的时间。还有一堆不应该出现的 0。我还尝试先使用 as.data.frame 将其转换为数据帧,然后再转换为 xts,但我得到的结果与上述类似。
编辑:我刚刚意识到它完全忽略了 "Seq" 列,并在 "Seq" 列中粘贴了时间戳(纳秒)的末尾。它正在读取行号吗?作为以秒为单位的时间戳,因此只显示所有时间戳?
我错过了什么吗?请帮忙。让我知道是否需要提供更多信息。
根据要求:
str(f2)
'data.frame': 494140 obs. of 62 variables:
$ DateTime: POSIXct, format: "2015-09-17 22:00:00" "2015-09-17 22:00:00" "2015-09-17 22:00:00" "2015-09-17 22:00:00" ...
$ Seq : int 11539422 11539422 11539422 11539479 11539480 11539482 11539555 11539556 11539565 11539565 ...
$ BP : int 15110 15110 15110 15115 15115 15115 15115 15115 15115 15115 ...
$ BQ : int 1 1 1 1 2 2 2 2 2 2 ...
$ BO : int 1 1 1 1 2 2 2 2 2 2 ...
$ AP : int 15120 15120 15120 15120 15120 15120 15120 15120 15120 15120 ...
$ AQ : int 4 4 2 2 2 2 2 2 2 2 ...
$ AO : int 3 3 2 2 2 2 2 2 2 2 ...
$ BP1 : int 15105 15105 15105 15110 15110 15110 15110 15110 15110 15110 ...
$ BQ1 : int 1 1 1 1 1 1 1 1 1 1 ...
$ BO1 : int 1 1 1 1 1 1 1 1 1 1 ...
$ AP1 : int 15125 15125 15125 15125 15125 15125 15125 15125 15125 15125 ...
$ AQ1 : int 17 17 17 17 17 17 17 17 17 17 ...
$ AO1 : int 2 2 2 2 2 2 2 2 2 2 ...
$ BP2 : int 15100 15100 15100 15105 15105 15105 15105 15105 15105 15105 ...
$ BQ2 : int 4 4 4 1 1 1 1 1 1 1 ...
$ BO2 : int 3 3 3 1 1 1 1 1 1 1 ...
$ AP2 : int 15130 15130 15130 15130 15130 15130 15130 15130 15130 15130 ...
$ AQ2 : int 8 8 8 8 8 8 8 8 8 8 ...
$ AO2 : int 2 2 2 2 2 2 2 2 2 2 ...
$ BP3 : int 15095 15095 15095 15100 15100 15100 15100 15100 15100 15100 ...
$ BQ3 : int 7 7 7 4 4 4 4 4 4 4 ...
$ BO3 : int 6 6 6 3 3 3 3 3 3 3 ...
$ AP3 : int 15135 15135 15135 15135 15135 15135 15135 15135 15135 15135 ...
$ AQ3 : int 3 3 3 3 3 3 3 4 4 4 ...
$ AO3 : int 1 1 1 1 1 1 1 2 2 2 ...
$ BP4 : int 15090 15090 15090 15095 15095 15095 15095 15095 15095 15095 ...
$ BQ4 : int 33 33 33 7 7 7 7 7 7 7 ...
$ BO4 : int 3 3 3 6 6 6 6 6 6 6 ...
$ AP4 : int 15140 15140 15140 15140 15140 15140 15140 15140 15140 15140 ...
$ AQ4 : int 3 3 3 3 3 3 3 3 3 3 ...
$ AO4 : int 1 1 1 1 1 1 1 1 1 1 ...
$ BP5 : int 15085 15085 15085 15090 15090 15090 15090 15090 15090 15090 ...
$ BQ5 : int 1 1 1 33 33 33 33 33 33 33 ...
$ BO5 : int 1 1 1 3 3 3 3 3 3 3 ...
$ AP5 : int 15145 15145 15145 15145 15145 15145 15145 15145 15145 15145 ...
$ AQ5 : int 4 4 4 4 4 4 4 4 4 4 ...
$ AO5 : int 4 4 4 4 4 4 4 4 4 4 ...
$ BP6 : int 15080 15080 15080 15085 15085 15085 15085 15085 15085 15085 ...
$ BQ6 : int 2 2 2 1 1 1 1 1 2 2 ...
$ BO6 : int 1 1 1 1 1 1 1 1 2 2 ...
$ AP6 : int 15150 15150 15150 15150 15150 15150 15150 15150 15150 15150 ...
$ AQ6 : int 2 2 2 2 2 2 2 2 2 2 ...
$ AO6 : int 2 2 2 2 2 2 2 2 2 2 ...
$ BP7 : int 15075 15075 15075 15080 15080 15080 15080 15080 15080 15080 ...
$ BQ7 : int 2 2 2 2 2 2 2 2 2 2 ...
$ BO7 : int 2 2 2 1 1 1 1 1 1 1 ...
$ AP7 : int 15160 15160 15160 15160 15160 15160 15160 15160 15160 15160 ...
$ AQ7 : int 2 2 2 2 2 2 2 2 2 2 ...
$ AO7 : int 2 2 2 2 2 2 2 2 2 2 ...
$ BP8 : int 15070 15070 15070 15075 15075 15075 15075 15075 15075 15075 ...
$ BQ8 : int 1 1 1 2 2 2 3 3 3 2 ...
$ BO8 : int 1 1 1 2 2 2 3 3 3 2 ...
$ AP8 : int 15165 15165 15165 15165 15165 15165 15165 15165 15165 15165 ...
$ AQ8 : int 3 3 3 3 3 3 3 3 3 3 ...
$ AO8 : int 2 2 2 2 2 2 2 2 2 2 ...
$ BP9 : int 0 15060 15060 15070 15070 15070 15070 15070 15070 15070 ...
$ BQ9 : int 0 3 3 1 1 1 1 1 1 1 ...
$ BO9 : int 0 3 3 1 1 1 1 1 1 1 ...
$ AP9 : int 15170 15170 15170 15170 15170 15170 15170 15170 15170 15170 ...
$ AQ9 : int 6 6 6 6 6 7 7 7 7 7 ...
$ AO9 : int 1 1 1 1 1 2 2 2 2 2 ...
编辑(25/11/15):
midpoint.agg<- function(file, skip = 0, lines = 50000, on = "minutes", k = 5){
whole_data<- read.csv(file = file,header = FALSE,sep = "",col.names = c("DateTime","Seq","BP","BQ","BO","AP","AQ","AO","BP1","BQ1","BO1","AP1","AQ1","AO1","BP2","BQ2","BO2","AP2","AQ2","AO2","BP3","BQ3","BO3","AP3","AQ3","AO3","BP4","BQ4","BO4","AP4","AQ4","AO4","BP5","BQ5","BO5","AP5","AQ5","AO5","BP6","BQ6","BO6","AP6","AQ6","AO6","BP7","BQ7","BO7","AP7","AQ7","AO7","BP8","BQ8","BO8","AP8","AQ8","AO8","BP9","BQ9","BO9","AP9","AQ9","AO9"),nrows = lines,skip = skip)
whole_data$DateTime= as.POSIXct(whole_data$DateTime/(10^9), origin="1970-01-01") #timestamp conversion
completecase<- whole_data[complete.cases(whole_data),]
p<- data.frame(DateTime=completecase$DateTime, BP=completecase$BP, AP=completecase$AP, MP=(completecase$BP+completecase$AP)/2) #midpoint dataframe
my_xts<- as.xts(x = p$MP,order.by = p$DateTime)
myagg<-aggregatets(my_xts, on = on, k = k)
myagg
}
Link 到文件:https://drive.google.com/folderview?id=0BwwnLqZcphbEb09qa0hzVUlQdGs&usp=sharing
所以我正在按要求将数据文件上传到 google 驱动器。我稍微改变了我的方法,就我如何走到尽头而言,但仍在寻找相同的输出并面临相同的问题。现在更奇怪了。
就像我在原来的 post 中所说的那样,我有一个包含 SIZ5 一天的高频数据的文件,但现在 运行 在我拆分的整个文件上使用我的函数它分为不同的文件,每个文件有 50000 行数据。(您将在我上传的数据文件夹中看到)。这些文件被命名为 "split_aa.csv"、"split_ab.csv" 等等。
当我 运行 我的 midpoint.agg(上面给出的)第一个文件的功能。它 运行 非常完美并且完全符合我的要求:
> a<- midpoint.agg("split_aa.csv")
> head(a)
ts
2015-09-18 03:35:00 15122.5
2015-09-18 03:40:00 15117.5
2015-09-18 03:45:00 15110.0
2015-09-18 03:50:00 15112.5
2015-09-18 03:55:00 15117.5
2015-09-18 04:00:00 15117.5
> length(a)
[1] 86
但是当我 运行 它出于某种原因在 "split-ab.csv" 上时,xts 函数读取前几个时间戳作为 1970/01/01 的起始日期,然后聚合来自那里。因此 "b" 包含 4808544 行并且是一个 73.4mb 的 xts object:
> b<- midpoint.agg("split_ab.csv")
> head(b)
ts
1970-01-01 05:35:00 15027.5
1970-01-01 05:40:00 15027.5
1970-01-01 05:45:00 15027.5
1970-01-01 05:50:00 15027.5
1970-01-01 05:55:00 15027.5
1970-01-01 06:00:00 15027.5
> length(b)
[1] 4808544
我不知道为什么会这样。更奇怪的是,它发生在文件夹中的几个文件上,而不是其他文件上。我已经指出问题发生在 as.xts 函数,当它试图将 "p" 数据帧转换为 xts object 时。前几行然后读取 1970-01-01,然后收敛回常态。我什至尝试将数据分成 100,000 行而不是 50,000 行,但我仍然面临同样的问题。我怀疑,就像许多人建议的那样,这可能是数据的问题,但我似乎无法查明问题出在哪里,或者它是否甚至是数据。多看几眼会很有帮助。
如果需要任何其他信息,请告诉我。
"the xts function reads the first few time stamps as the origin date of 1970/01/01" 这不是真的。 xts orders 文件中的所有时间戳。如果其中 任何 为零,则它们将是 xts 对象中的第一个观测值。
正如我所怀疑的,您的 CSV 中的数据不是您所期望的。在文件 "split_ab.csv" 中,第 23669 行和第 23670 行的时间戳为 0。
1442558305629290858 12247553 15025 8 7 15030 5 3 15020 12 11 15035 16 16 15015 20 18 15040 21 18 15010 27 21 15045 24 18 15005 14 13 15050 36 28 15000 23 17 15055 21 20 14995 11 10 15060 24 23 14990 32 10 15065 16 14 14985 8 7 15070 13 10 14980 12 9 15075 15 13
0 12247553 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 12247553 15025 1 1 15030 11 9 15020 10 10 15035 19 18 15015 18 17 15040 22 19 15010 27 21 15045 23 17 15005 14 13 15050 36 28 15000 23 17 15055 21 20 14995 11 10 15060 24 23 14990 32 10 15065 16 14 14985 8 7 15070 13 10 14980 12 9 15075 15 13
1442558318615424792 12248063 15025 1 1 15030 11 9 15020 10 10 15035 19 18 15015 19 18 15040 22 19 15010 27 21 15045 23 17 15005 14 13 15050 36 28 15000 23 17 15055 21 20 14995 11 10 15060 24 23 14990 32 10 15065 16 14 14985 8 7 15070 13 10 14980 12 9 15075 15 13
您需要在转换为 xts 对象之前清理数据。我对您的数据了解不够,无法帮助您决定如何处理时间戳为零的行。
我有一个 .csv 文件,其中包含 SIZ5(白银期货)的高频数据,我正在尝试将其导入 xts object,以便我可以使用 "highfrequency" 中的一些函数包裹。
我使用 read.csv 函数将数据加载到 R 上。在完成删除 Nas 和更改时间格式的所有必要修复后。
f<-read.csv(file = "SIZ5_20150918_ob2.csv",header = FALSE,sep = "",col.names = c("DateTime","Seq","BP","BQ","BO","AP","AQ","AO","BP1","BQ1","BO1","AP1","AQ1","AO1","BP2","BQ2","BO2","AP2","AQ2","AO2","BP3","BQ3","BO3","AP3","AQ3","AO3","BP4","BQ4","BO4","AP4","AQ4","AO4","BP5","BQ5","BO5","AP5","AQ5","AO5","BP6","BQ6","BO6","AP6","AQ6","AO6","BP7","BQ7","BO7","AP7","AQ7","AO7","BP8","BQ8","BO8","AP8","AQ8","AO8","BP9","BQ9","BO9","AP9","AQ9","AO9"),nrows = 600000)
f$DateTime=as.POSIXct(f$DateTime/(10^9), origin="1970-01-01") #timestamp conversion
good1<-complete.cases(f)
f2<-f[good1,]
我的结果是:
DateTime Seq BP BQ BO AP AQ AO BP1 BQ1 BO1 AP1 AQ1 AO1 BP2 BQ2 BO2 AP2 AQ2 AO2 BP3 BQ3 BO3 AP3 AQ3 AO3 BP4 BQ4 BO4 AP4
1 2015-09-17 22:00:00 11539422 15110 1 1 15120 4 3 15105 1 1 15125 17 2 15100 4 3 15130 8 2 15095 7 6 15135 3 1 15090 33 3 15140
2 2015-09-17 22:00:00 11539422 15110 1 1 15120 4 3 15105 1 1 15125 17 2 15100 4 3 15130 8 2 15095 7 6 15135 3 1 15090 33 3 15140
3 2015-09-17 22:00:00 11539422 15110 1 1 15120 2 2 15105 1 1 15125 17 2 15100 4 3 15130 8 2 15095 7 6 15135 3 1 15090 33 3 15140
4 2015-09-17 22:00:00 11539479 15115 1 1 15120 2 2 15110 1 1 15125 17 2 15105 1 1 15130 8 2 15100 4 3 15135 3 1 15095 7 6 15140
5 2015-09-17 22:00:00 11539480 15115 2 2 15120 2 2 15110 1 1 15125 17 2 15105 1 1 15130 8 2 15100 4 3 15135 3 1 15095 7 6 15140
6 2015-09-17 22:00:00 11539482 15115 2 2 15120 2 2 15110 1 1 15125 17 2 15105 1 1 15130 8 2 15100 4 3 15135 3 1 15095 7 6 15140
*为了简洁起见,我省略了几列
然后:
> as.xts(f2)
Error in as.POSIXlt.character(x, tz, ...) :
character string is not in a standard unambiguous format
所以我尝试了:
fxts<-xts(f2[,-1],order.by = f2[,1])
但这就是我得到的:
Seq BP BQ BO AP AQ AO BP1 BQ1 BO1 AP1 AQ1 AO1 BP2 BQ2 BO2 AP2 AQ2 AO2 BP3 BQ3 BO3 AP3 AQ3 AO3 BP4 BQ4 BO4 AP4 AQ4 AO4
1970-01-01 12247553 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
1970-01-01 12247553 15025 1 1 15030 11 9 15020 10 10 15035 19 18 15015 18 17 15040 22 19 15010 27 21 15045 23 17 15005 14 13 15050 36 28
1970-01-01 12836196 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
1970-01-01 12836196 15240 1 1 15245 6 5 15235 12 11 15250 11 11 15230 10 9 15255 13 12 15225 12 11 15260 18 16 15220 13 12 15265 16 13
1970-01-01 14167856 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
1970-01-01 14167856 15225 11 9 15230 4 4 15220 19 19 15235 14 14 15215 32 26 15240 27 22 15210 29 25 15245 21 17 15205 24 19 15250 28 22
*再次省略最后几列
首先,时间列没有 header 然后它们都是 1970-01-01(origin),没有任何关联的时间。还有一堆不应该出现的 0。我还尝试先使用 as.data.frame 将其转换为数据帧,然后再转换为 xts,但我得到的结果与上述类似。
编辑:我刚刚意识到它完全忽略了 "Seq" 列,并在 "Seq" 列中粘贴了时间戳(纳秒)的末尾。它正在读取行号吗?作为以秒为单位的时间戳,因此只显示所有时间戳?
我错过了什么吗?请帮忙。让我知道是否需要提供更多信息。
根据要求:
str(f2)
'data.frame': 494140 obs. of 62 variables:
$ DateTime: POSIXct, format: "2015-09-17 22:00:00" "2015-09-17 22:00:00" "2015-09-17 22:00:00" "2015-09-17 22:00:00" ...
$ Seq : int 11539422 11539422 11539422 11539479 11539480 11539482 11539555 11539556 11539565 11539565 ...
$ BP : int 15110 15110 15110 15115 15115 15115 15115 15115 15115 15115 ...
$ BQ : int 1 1 1 1 2 2 2 2 2 2 ...
$ BO : int 1 1 1 1 2 2 2 2 2 2 ...
$ AP : int 15120 15120 15120 15120 15120 15120 15120 15120 15120 15120 ...
$ AQ : int 4 4 2 2 2 2 2 2 2 2 ...
$ AO : int 3 3 2 2 2 2 2 2 2 2 ...
$ BP1 : int 15105 15105 15105 15110 15110 15110 15110 15110 15110 15110 ...
$ BQ1 : int 1 1 1 1 1 1 1 1 1 1 ...
$ BO1 : int 1 1 1 1 1 1 1 1 1 1 ...
$ AP1 : int 15125 15125 15125 15125 15125 15125 15125 15125 15125 15125 ...
$ AQ1 : int 17 17 17 17 17 17 17 17 17 17 ...
$ AO1 : int 2 2 2 2 2 2 2 2 2 2 ...
$ BP2 : int 15100 15100 15100 15105 15105 15105 15105 15105 15105 15105 ...
$ BQ2 : int 4 4 4 1 1 1 1 1 1 1 ...
$ BO2 : int 3 3 3 1 1 1 1 1 1 1 ...
$ AP2 : int 15130 15130 15130 15130 15130 15130 15130 15130 15130 15130 ...
$ AQ2 : int 8 8 8 8 8 8 8 8 8 8 ...
$ AO2 : int 2 2 2 2 2 2 2 2 2 2 ...
$ BP3 : int 15095 15095 15095 15100 15100 15100 15100 15100 15100 15100 ...
$ BQ3 : int 7 7 7 4 4 4 4 4 4 4 ...
$ BO3 : int 6 6 6 3 3 3 3 3 3 3 ...
$ AP3 : int 15135 15135 15135 15135 15135 15135 15135 15135 15135 15135 ...
$ AQ3 : int 3 3 3 3 3 3 3 4 4 4 ...
$ AO3 : int 1 1 1 1 1 1 1 2 2 2 ...
$ BP4 : int 15090 15090 15090 15095 15095 15095 15095 15095 15095 15095 ...
$ BQ4 : int 33 33 33 7 7 7 7 7 7 7 ...
$ BO4 : int 3 3 3 6 6 6 6 6 6 6 ...
$ AP4 : int 15140 15140 15140 15140 15140 15140 15140 15140 15140 15140 ...
$ AQ4 : int 3 3 3 3 3 3 3 3 3 3 ...
$ AO4 : int 1 1 1 1 1 1 1 1 1 1 ...
$ BP5 : int 15085 15085 15085 15090 15090 15090 15090 15090 15090 15090 ...
$ BQ5 : int 1 1 1 33 33 33 33 33 33 33 ...
$ BO5 : int 1 1 1 3 3 3 3 3 3 3 ...
$ AP5 : int 15145 15145 15145 15145 15145 15145 15145 15145 15145 15145 ...
$ AQ5 : int 4 4 4 4 4 4 4 4 4 4 ...
$ AO5 : int 4 4 4 4 4 4 4 4 4 4 ...
$ BP6 : int 15080 15080 15080 15085 15085 15085 15085 15085 15085 15085 ...
$ BQ6 : int 2 2 2 1 1 1 1 1 2 2 ...
$ BO6 : int 1 1 1 1 1 1 1 1 2 2 ...
$ AP6 : int 15150 15150 15150 15150 15150 15150 15150 15150 15150 15150 ...
$ AQ6 : int 2 2 2 2 2 2 2 2 2 2 ...
$ AO6 : int 2 2 2 2 2 2 2 2 2 2 ...
$ BP7 : int 15075 15075 15075 15080 15080 15080 15080 15080 15080 15080 ...
$ BQ7 : int 2 2 2 2 2 2 2 2 2 2 ...
$ BO7 : int 2 2 2 1 1 1 1 1 1 1 ...
$ AP7 : int 15160 15160 15160 15160 15160 15160 15160 15160 15160 15160 ...
$ AQ7 : int 2 2 2 2 2 2 2 2 2 2 ...
$ AO7 : int 2 2 2 2 2 2 2 2 2 2 ...
$ BP8 : int 15070 15070 15070 15075 15075 15075 15075 15075 15075 15075 ...
$ BQ8 : int 1 1 1 2 2 2 3 3 3 2 ...
$ BO8 : int 1 1 1 2 2 2 3 3 3 2 ...
$ AP8 : int 15165 15165 15165 15165 15165 15165 15165 15165 15165 15165 ...
$ AQ8 : int 3 3 3 3 3 3 3 3 3 3 ...
$ AO8 : int 2 2 2 2 2 2 2 2 2 2 ...
$ BP9 : int 0 15060 15060 15070 15070 15070 15070 15070 15070 15070 ...
$ BQ9 : int 0 3 3 1 1 1 1 1 1 1 ...
$ BO9 : int 0 3 3 1 1 1 1 1 1 1 ...
$ AP9 : int 15170 15170 15170 15170 15170 15170 15170 15170 15170 15170 ...
$ AQ9 : int 6 6 6 6 6 7 7 7 7 7 ...
$ AO9 : int 1 1 1 1 1 2 2 2 2 2 ...
编辑(25/11/15):
midpoint.agg<- function(file, skip = 0, lines = 50000, on = "minutes", k = 5){
whole_data<- read.csv(file = file,header = FALSE,sep = "",col.names = c("DateTime","Seq","BP","BQ","BO","AP","AQ","AO","BP1","BQ1","BO1","AP1","AQ1","AO1","BP2","BQ2","BO2","AP2","AQ2","AO2","BP3","BQ3","BO3","AP3","AQ3","AO3","BP4","BQ4","BO4","AP4","AQ4","AO4","BP5","BQ5","BO5","AP5","AQ5","AO5","BP6","BQ6","BO6","AP6","AQ6","AO6","BP7","BQ7","BO7","AP7","AQ7","AO7","BP8","BQ8","BO8","AP8","AQ8","AO8","BP9","BQ9","BO9","AP9","AQ9","AO9"),nrows = lines,skip = skip)
whole_data$DateTime= as.POSIXct(whole_data$DateTime/(10^9), origin="1970-01-01") #timestamp conversion
completecase<- whole_data[complete.cases(whole_data),]
p<- data.frame(DateTime=completecase$DateTime, BP=completecase$BP, AP=completecase$AP, MP=(completecase$BP+completecase$AP)/2) #midpoint dataframe
my_xts<- as.xts(x = p$MP,order.by = p$DateTime)
myagg<-aggregatets(my_xts, on = on, k = k)
myagg
}
Link 到文件:https://drive.google.com/folderview?id=0BwwnLqZcphbEb09qa0hzVUlQdGs&usp=sharing
所以我正在按要求将数据文件上传到 google 驱动器。我稍微改变了我的方法,就我如何走到尽头而言,但仍在寻找相同的输出并面临相同的问题。现在更奇怪了。
就像我在原来的 post 中所说的那样,我有一个包含 SIZ5 一天的高频数据的文件,但现在 运行 在我拆分的整个文件上使用我的函数它分为不同的文件,每个文件有 50000 行数据。(您将在我上传的数据文件夹中看到)。这些文件被命名为 "split_aa.csv"、"split_ab.csv" 等等。
当我 运行 我的 midpoint.agg(上面给出的)第一个文件的功能。它 运行 非常完美并且完全符合我的要求:
> a<- midpoint.agg("split_aa.csv")
> head(a)
ts
2015-09-18 03:35:00 15122.5
2015-09-18 03:40:00 15117.5
2015-09-18 03:45:00 15110.0
2015-09-18 03:50:00 15112.5
2015-09-18 03:55:00 15117.5
2015-09-18 04:00:00 15117.5
> length(a)
[1] 86
但是当我 运行 它出于某种原因在 "split-ab.csv" 上时,xts 函数读取前几个时间戳作为 1970/01/01 的起始日期,然后聚合来自那里。因此 "b" 包含 4808544 行并且是一个 73.4mb 的 xts object:
> b<- midpoint.agg("split_ab.csv")
> head(b)
ts
1970-01-01 05:35:00 15027.5
1970-01-01 05:40:00 15027.5
1970-01-01 05:45:00 15027.5
1970-01-01 05:50:00 15027.5
1970-01-01 05:55:00 15027.5
1970-01-01 06:00:00 15027.5
> length(b)
[1] 4808544
我不知道为什么会这样。更奇怪的是,它发生在文件夹中的几个文件上,而不是其他文件上。我已经指出问题发生在 as.xts 函数,当它试图将 "p" 数据帧转换为 xts object 时。前几行然后读取 1970-01-01,然后收敛回常态。我什至尝试将数据分成 100,000 行而不是 50,000 行,但我仍然面临同样的问题。我怀疑,就像许多人建议的那样,这可能是数据的问题,但我似乎无法查明问题出在哪里,或者它是否甚至是数据。多看几眼会很有帮助。
如果需要任何其他信息,请告诉我。
"the xts function reads the first few time stamps as the origin date of 1970/01/01" 这不是真的。 xts orders 文件中的所有时间戳。如果其中 任何 为零,则它们将是 xts 对象中的第一个观测值。
正如我所怀疑的,您的 CSV 中的数据不是您所期望的。在文件 "split_ab.csv" 中,第 23669 行和第 23670 行的时间戳为 0。
1442558305629290858 12247553 15025 8 7 15030 5 3 15020 12 11 15035 16 16 15015 20 18 15040 21 18 15010 27 21 15045 24 18 15005 14 13 15050 36 28 15000 23 17 15055 21 20 14995 11 10 15060 24 23 14990 32 10 15065 16 14 14985 8 7 15070 13 10 14980 12 9 15075 15 13
0 12247553 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 12247553 15025 1 1 15030 11 9 15020 10 10 15035 19 18 15015 18 17 15040 22 19 15010 27 21 15045 23 17 15005 14 13 15050 36 28 15000 23 17 15055 21 20 14995 11 10 15060 24 23 14990 32 10 15065 16 14 14985 8 7 15070 13 10 14980 12 9 15075 15 13
1442558318615424792 12248063 15025 1 1 15030 11 9 15020 10 10 15035 19 18 15015 19 18 15040 22 19 15010 27 21 15045 23 17 15005 14 13 15050 36 28 15000 23 17 15055 21 20 14995 11 10 15060 24 23 14990 32 10 15065 16 14 14985 8 7 15070 13 10 14980 12 9 15075 15 13
您需要在转换为 xts 对象之前清理数据。我对您的数据了解不够,无法帮助您决定如何处理时间戳为零的行。