我在不同的日期测量了连续变量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=...)?
这张图片是我试过的第一张图片。我想要的是每五年一次的盒子,而不是每年一盒。
答案 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")))
答案 2 :(得分:1)
library(lubridate)
year=year(rdob)