且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

在R中绘制顺序(时间序列)数据的子集

更新时间:2023-02-26 19:55:24

您需要获取数据的子集.另外,我会将数据框的格式从宽格式转换为长格式,这更容易使用,特别是出于绘图/可视化目的;

You need to get a subset of your data. Also, I would convert the data frame form wide to long format which is much easier to work with, specially for plotting/visualization purposes;

#long format with many rows instead of many columns
library(reshape2)
long <- melt(df, id.vars = c("Year")) 

#add a column with actual dates instead year and month in different columns
long$date <- as.Date(with(long,paste(variable,"15",Year,sep = "-")), "%b-%d-%Y")  

#take the subset of the data for May 2012 to June 2014
Date1 <- as.Date("2012-05-01", "%Y-%m-%d")
Date2 <- as.Date("2014-06-30", "%Y-%m-%d")
subdf <- long[long$date < Date2 & long$date > Date1,]

#use ggplot2 as it provides us nice labels and theme for timeseries by default
library(ggplot2)
ggplot(data=subdf, aes(date,value)) + geom_line()

数据:

Data:

df <- structure(list(Year = 2011:2017, Jan = c(NA, 13.114463, 12.374017, 
      12.616257, 13.662063, 14.516674, 8.614229), Feb = c(NA, 13.021268, 
      12.365795, 12.720611, 13.527596, 14.759385, 8.446361), Mar = c(NA, 
      12.999545, 12.32328, 12.841626, 13.56843, 14.951384, 8.239606
      ), Apr = c(NA, 12.990171, 12.377747, 12.897939, 13.782818, 14.763781, 
      8.286693), May = c(NA, 12.898018, 12.462203, 13.008535, 13.889276, 
      14.536779, 8.498938), Jun = c(NA, 12.611495, 12.630298, 13.136377, 
      13.971303, 13.978265, 8.972903), Jul = c(13.724575, 12.311641, 
      12.780495, 13.159393, 14.181846, 12.888989, NA), Aug = c(13.670017, 
      12.126345, 12.848942, 13.290928, 14.329937, 11.612033, NA), Sep = c(13.782099, 
      11.974871, 12.80621, 13.495218, 14.385533, 10.362592, NA), Oct = c(13.675788, 
      12.019042, 12.860463, 13.63636, 14.289386, 9.205528, NA), Nov = c(13.442914, 
      12.163618, 12.838953, 13.797778, 14.222535, 8.649027, NA), Dec = c(13.279969, 
      12.30466, 12.608965, 13.827273, 14.384618, 8.662219, NA)), .Names = c("Year", 
      "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", 
      "Oct", "Nov", "Dec"), class = "data.frame", row.names = c(NA, -7L))

将数据重整为长格式:

Reshaped data to long format:

head(long)

#   Year variable    value       date 
# 1 2011      Jan       NA 2011-01-15 
# 2 2012      Jan 13.11446 2012-01-15 
# 3 2013      Jan 12.37402 2013-01-15 
# 4 2014      Jan 12.61626 2014-01-15 
# 5 2015      Jan 13.66206 2015-01-15 
# 6 2016      Jan 14.51667 2016-01-15