考虑以下示例
data <- data_frame(time = c(ymd_hms('20160201 08:10:53'),
ymd_hms('20160202 08:10:53'),
ymd_hms('20160203 08:10:54'),
ymd_hms('20160204 08:10:54'),
ymd_hms('20160205 08:10:55')),
value = c(1,1,1,2,2))
> data
# A tibble: 5 × 2
time value
<dttm> <dbl>
1 2016-02-01 03:10:53 1
2 2016-02-02 03:10:53 1
3 2016-02-03 03:10:54 1
4 2016-02-04 03:10:54 2
5 2016-02-05 03:10:55 2
我想汇总这个数据框,这样我就可以在我的数据的所有日子里以给定的小时 - 分钟秒获得value
的平均值。
换句话说,我可以做到
> data %>% group_by(time_agg = paste(hour(time), minute(time), second(time))) %>%
+ summarise(mean = mean(value))
# A tibble: 3 × 2
time_agg mean
<chr> <dbl>
1 3 10 53 1.0
2 3 10 54 1.5
3 3 10 55 2.0
这是我的问题:
我需要绘制这些数据(x轴=时间,y =平均值),但time_agg
是一个字符!有没有办法让R(ggplot)了解这些是几个小时?
答案 0 :(得分:1)
您可以根据hms
创建一个数字列作为x轴中断,另一列格式化为%H:%M:%S
作为标签以手动方式绘制。直接使用difftime
作为x轴is difficult:
library(dplyr)
library(ggplot2)
df <- df %>% group_by(labels = strftime(time, "%H:%M:%S"),
hours = as.numeric(as.difftime(labels))) %>%
summarise(mean = mean(value))
df
#Source: local data frame [3 x 3]
#Groups: labels [?]
# labels hours mean
# <chr> <dbl> <dbl>
#1 03:10:53 3.181389 1.0
#2 03:10:54 3.181667 1.5
#3 03:10:55 3.181944 2.0
ggplot(df, aes(x = hours, y = mean)) + geom_point(size = 3) +
scale_x_continuous(breaks = df$hours, labels = df$labels, name = "time")