R前两年的月数

时间:2016-10-20 15:57:07

标签: r date ggplot2

我有一个数据框,其中包含不同对象上最长2年的数据:

ISBN   Date        Quantity
3457   2004-06-15  10
3457   2004-08-16  6
3457   2004-08-19  10
3457   2005-04-19  7
3457   2005-04-20  12
9885   2013-01-15  10
9885   2013-03-16  6
9855   2013-08-19  10
9885   2014-09-19  7
9885   2014-09-20  12

如何为第一年绘制Jan to Dec,为{strong>第二年继续Jan to Dec? 我想这个想法是规范年份(有第一,第二),但不是几个月。 (这是一个例子) Number of Items Sold over 2 Years Period Since Release

2 个答案:

答案 0 :(得分:1)

我会使用 <li><a asp-area="" asp-controller="Register" asp-action="test">Test</a></li> 包来做这样的事情。注意我正在调用数据帧lubridate,因为您没有给它命名。

例如:

df

首先将日期格式化为:

library(lubridate)

然后提取月份和年份:

df$Date <- ymd(df$Date)

从那里,您可以使用df$Month <- month(df$Date, label=TRUE, abbr=TRUE) df$Year <- year(df$Date)

绘制结果
ggplot2

请注意,您可以在此处更好地询问您的问题,因为您没有提供可重复的示例。

答案 1 :(得分:0)

你可以尝试:

data <- df %>%
  group_by(ISBN) %>%
  arrange(Date) %>%
  mutate(Year  = year(Date), 
         Month = month(Date, label = TRUE),
         Rank  = paste(sapply(cumsum(Year != lag(Year,default=0)), toOrdinal), "Year")) %>%
  group_by(Rank, Month, add = TRUE) %>%
  summarise(Sum = sum(Quantity))

ggplot(data = data, aes(x = Month, y = Sum, 
                        group = factor(ISBN), 
                        colour = factor(ISBN))) +
  geom_line(stat = "identity") +
  facet_grid(. ~ Rank) +
  scale_colour_discrete(name = "ISBN") +
  theme(panel.margin = unit(0, "lines"),
        axis.text.x = element_text(angle = 90))

审核以下df

df <- data.frame(
  ISBN = sample(c(3457, 9885), 1000, replace = TRUE),
  Date = sample(seq(as.Date('2004/01/01'), 
                    as.Date('2011/12/31'), by = "month"), 
                1000, replace = TRUE),
  Quantity = sample(1:12, 1000, replace = TRUE)
)

这会产生:

enter image description here