子集时间序列数据

时间:2016-05-10 20:27:12

标签: r ggplot2 time-series subset xts

 head(Price.data)
        Dry_Gas_Y Power_Gas_Y Price_Gas_Y
1990-01-01  52.16720    5.469179        2.39
1990-02-01  51.45287    5.470755        1.90
1990-03-01  49.29829    6.908609        1.55
1990-04-01  48.29243    7.721371        1.49
1990-05-01  47.25959    9.154057        1.47
1990-06-01  47.48744   11.525595        1.47

如何仅绘制2010年至2014年的3月,4月和6月数据?

{{1}}

4 个答案:

答案 0 :(得分:1)

library(tidyverse)

Price.data %>% 
  mutate(year = as.numeric(format(Date, "%Y")),
         month = as.numeric(format(Date, "%m"))) %>%
  filter(year > 2009 & year < 2015, month == 3 | month == 4 | month ==6) %>%     
ggplot(aes(Demand,Price))+geom_point()+geom_smooth(method=lm)

答案 1 :(得分:0)

您可以使用data.table,这可能是最快的解决方案

library(data.table)   


# convert your dataset into a data.table
  setDT(df)

# If necessary, get date column into date format
#  df[ , Date := as.Date(df$Date, "%m-%d-%y") ] 

# Create separate columns for year and month
  df[, year := year(Date)][, month := month(Date)]

# filter dataset
  df <- df[ month %in% c(3,4,6) & year %in% c(2009:2014), ]
  #  subset(df, month %in% c(3,4,6) & year %in% c(2009:2014) ) # you could also use a simple subset, but this is likely to be slower

剧情

  ggplot(data=df, aes(x=Demand, y=Price)) + geom_point() + geom_smooth(method=lm)

答案 2 :(得分:0)

从您的示例中我没有看到具有列名的日期,并且看起来日期是行名称。出于这个原因,这个例子创建了一个'Date'列,然后是'Month'和&amp; “年份”列可供您过滤日期。

library(lubridate)
library(dplyr

plot_months <- Price.data%>%
               mutate(Date = row.names(.),
                      Month = month(Date),
                      Year = year(Date))%>%
               filter(Month %in% c(3,4,6),
                      Year %in% c(2009:2014))

ggplot(plot_months, aes(x=Demand,y=Price))+
       geom_point()+
       geom_smooth(method=lm)

答案 3 :(得分:0)

由于Price.data是xts对象,因此您可以使用.indexmon函数提取要绘制的月份。然后使用基于范围的子集来提取所需的年份范围。

请注意,.indexmon会返回以January = 0开头的月份,就像$mon个对象的POSIXlt元素一样。

ggplot(Price.data[.indexmon(Price.data) %in% c(2, 3, 5)]['2010/2014'],
  aes(x=Dry_Gas_Y, y=Price_Gas_Y)) + geom_point() + geom_smooth(method=lm)
相关问题