我有一个数据框,其中包含不同对象上最长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
答案 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)
)
这会产生: