如何在R中基于5年间隔创建箱图

时间:2016-05-19 19:26:53

标签: r date dataframe boxplot

我在不同的日期测量了连续变量y。我需要用一个框来制作箱形图,显示每5年间隔的y分布。

示例数据:

rdob <- as.Date(dob, format= "%m/%d/%y")
ggplot(data = data, aes(x=rdob, y=ageyear)) + geom_boxplot()

#Warning message:
#Continuous x aesthetic -- did you forget aes(group=...)?  

enter image description here

这张图片是我试过的第一张图片。我想要的是每五年一次的盒子,而不是每年一盒。

3 个答案:

答案 0 :(得分:2)

这是一种在基数R中拉出年份的方法:

format(as.Date("2008-11-03", format="%Y-%m-%d"), "%Y")

只需将日期向量包装在format()中,然后添加“%Y”即可。要将此值设为整数,可以使用as.integer

您还可以查看year包中的lubridate函数,这将使此提取更加简单。

获得5年间隔的一种方法是使用cut创建一个因子变量,该变量在选定的断点处创建水平。除非你有几十年的时间,否则最好的办法是手动设置断点:

df$myTimeInterval <- cut(df$years, breaks=c(1995, 2000, 2005, 2010, 2015))

答案 1 :(得分:2)

以下是Dave2e建议使用cut on date intervals和ggplot的group aesthetic mapping的示例:

library(ggplot2)

n <- 1000

## Randomly sample birth dates and dummy up an effect that trends upward with DOB
dobs <- sample(seq(as.Date('1970/01/01'), Sys.Date(), by="day"), n)
effect <- rnorm(n) + as.numeric(as.POSIXct(dobs)) / as.numeric(as.POSIXct(Sys.Date()))
data <- data.frame(dob=dobs, effect=effect)

## boxplot w/ DOB binned to 5 year intervals
ggplot(data=data, aes(x=dob, y=effect)) + geom_boxplot(aes(group=cut(dob, "5 year")))

Boxplot binned by 5 year intervals

答案 2 :(得分:1)

library(lubridate)
year=year(rdob)