R:使用xts包读取timeseries数据

R:使用xts包读取timeseries数据,r,dataframe,xts,zoo,R,Dataframe,Xts,Zoo,我有一个时间序列json数据。我需要计算给定日期对之间的日期值对。 我用下面的方法解决了这个问题。在这里,我需要得到1995-01-01和2000-01-01之间的值,它可以工作。但是,是否可以使用xts或zoo软件包执行此操作?更好的办法是什么?如何使用xtspackage处理这种类型的json值 json <- "[\n {\n \"1986-03-13\": 0.0034722 \n},\n{\n \"1987-09-21\": 0.0069444 \n},\n{\n \"1990

我有一个时间序列json数据。我需要计算给定日期对之间的日期值对。 我用下面的方法解决了这个问题。在这里,我需要得到1995-01-01和2000-01-01之间的值,它可以工作。但是,是否可以使用
xts
zoo
软件包执行此操作?更好的办法是什么?如何使用
xts
package处理这种类型的json值

json <-  "[\n {\n \"1986-03-13\": 0.0034722 \n},\n{\n \"1987-09-21\": 0.0069444 \n},\n{\n \"1990-04-16\": 0.013889 \n},\n{\n \"1991-06-27\": 0.020833 \n},\n{\n \"1992-06-15\": 0.03125 \n},\n{\n \"1994-05-23\": 0.0625 \n},\n{\n \"1996-12-09\":  0.125 \n},\n{\n \"1998-02-23\":   0.25 \n},\n{\n \"1999-03-29\":    0.5 \n},\n{\n \"2003-02-18\":      1 \n} \n]"
dates <- c()
values <- c()
for(i in 1:length(fromJSON(json))){
  data <- fromJSON(json)[i]
  date = names(data[[1]])
  value = toString(data[[1]])
  dates <- c(dates,date)
  values <- c(values,value)
}
df <- data.frame(date=dates,value= values)
> df
         date     value
1  1986-03-13 0.0034722
2  1987-09-21 0.0069444
3  1990-04-16  0.013889
4  1991-06-27  0.020833
5  1992-06-15   0.03125
6  1994-05-23    0.0625
7  1996-12-09     0.125
8  1998-02-23      0.25
9  1999-03-29       0.5
10 2003-02-18         1

splDates <- c()
for(date in df$date){
  if(as.Date(date) >= as.Date("1995-01-01") & as.Date(date) <= as.Date("2000-01-01") ){
    splDates <- c(splDates,date) 
  }
}
df1 <- df[which(df$date %in% splDates),]
> df1
        date value
7 1996-12-09 0.125
8 1998-02-23  0.25
9 1999-03-29   0.5

json使用
xts
包,您可以尝试以下内容

require(RJSONIO)
require(xts)

json <-  "[\n {\n \"1986-03-13\": 0.0034722 \n},\n{\n \"1987-09-21\": 0.0069444 \n},\n{\n \"1990-04-16\": 0.013889 \n},\n{\n \"1991-06-27\": 0.020833 \n},\n{\n \"1992-06-15\": 0.03125 \n},\n{\n \"1994-05-23\": 0.0625 \n},\n{\n \"1996-12-09\":  0.125 \n},\n{\n \"1998-02-23\":   0.25 \n},\n{\n \"1999-03-29\":    0.5 \n},\n{\n \"2003-02-18\":      1 \n} \n]"

data <- data.frame(date = unlist(lapply(fromJSON(json), names)),
                   value = unname(unlist(fromJSON(json))),
                   stringsAsFactors = FALSE
                   )

data <- xts(data$value, as.Date(data$date))
data["1995-01-01::2000-01-01"]
##             [,1]
## 1996-12-09 0.125
## 1998-02-23 0.250
## 1999-03-29 0.500
> df <- as.data.frame(scan(what=list(date="",x=0)))
1: 1986-03-13 0.0034722
2: 1987-09-21 0.0069444
3: 1990-04-16  0.013889
4: 1991-06-27  0.020833
5: 1992-06-15   0.03125
6: 1994-05-23    0.0625
7: 1996-12-09     0.125
8: 1998-02-23      0.25
9: 1999-03-29       0.5
10: 2003-02-18         1
11: 
Read 10 records


> df.xts <- xts(df$x , order.by = as.POSIXlt(df$date , format="%Y-%m-%d"))
> df.xts
                [,1]
1986-03-13 0.0034722
1987-09-21 0.0069444
1990-04-16 0.0138890
1991-06-27 0.0208330
1992-06-15 0.0312500
1994-05-23 0.0625000
1996-12-09 0.1250000
1998-02-23 0.2500000
1999-03-29 0.5000000
2003-02-18 1.0000000
> df.xts["1995::2000"]
            [,1]
1996-12-09 0.125
1998-02-23 0.250
1999-03-29 0.500
require(RJSONIO)
需要(xts)

json您可以像这样将df转换为
xts
对象

require(RJSONIO)
require(xts)

json <-  "[\n {\n \"1986-03-13\": 0.0034722 \n},\n{\n \"1987-09-21\": 0.0069444 \n},\n{\n \"1990-04-16\": 0.013889 \n},\n{\n \"1991-06-27\": 0.020833 \n},\n{\n \"1992-06-15\": 0.03125 \n},\n{\n \"1994-05-23\": 0.0625 \n},\n{\n \"1996-12-09\":  0.125 \n},\n{\n \"1998-02-23\":   0.25 \n},\n{\n \"1999-03-29\":    0.5 \n},\n{\n \"2003-02-18\":      1 \n} \n]"

data <- data.frame(date = unlist(lapply(fromJSON(json), names)),
                   value = unname(unlist(fromJSON(json))),
                   stringsAsFactors = FALSE
                   )

data <- xts(data$value, as.Date(data$date))
data["1995-01-01::2000-01-01"]
##             [,1]
## 1996-12-09 0.125
## 1998-02-23 0.250
## 1999-03-29 0.500
> df <- as.data.frame(scan(what=list(date="",x=0)))
1: 1986-03-13 0.0034722
2: 1987-09-21 0.0069444
3: 1990-04-16  0.013889
4: 1991-06-27  0.020833
5: 1992-06-15   0.03125
6: 1994-05-23    0.0625
7: 1996-12-09     0.125
8: 1998-02-23      0.25
9: 1999-03-29       0.5
10: 2003-02-18         1
11: 
Read 10 records


> df.xts <- xts(df$x , order.by = as.POSIXlt(df$date , format="%Y-%m-%d"))
> df.xts
                [,1]
1986-03-13 0.0034722
1987-09-21 0.0069444
1990-04-16 0.0138890
1991-06-27 0.0208330
1992-06-15 0.0312500
1994-05-23 0.0625000
1996-12-09 0.1250000
1998-02-23 0.2500000
1999-03-29 0.5000000
2003-02-18 1.0000000
> df.xts["1995::2000"]
            [,1]
1996-12-09 0.125
1998-02-23 0.250
1999-03-29 0.500
>df.xts df.xts
[,1]
1986-03-13 0.0034722
1987-09-21 0.0069444
1990-04-16 0.0138890
1991-06-27 0.0208330
1992-06-15 0.0312500
1994-05-23 0.0625000
1996-12-09 0.1250000
1998-02-23 0.2500000
1999-03-29 0.5000000
2003-02-18 1.0000000
>df.xts[“1995:2000”]
[,1]
1996-12-09 0.125
1998-02-23 0.250
1999-03-29 0.500

我不打算否决投票,但当一个字符可以转换为日期时,将其转换为POSIXlt
是一种浪费<与
Date
POSIXct
对象相比,code>POSIXlt
对象内存效率低下。