2016-06-09 4 views
-2

У меня есть данные, которые выглядят так.Как построить данные временных рядов с ggplot2 в R

head(histogram) 
    year month day create verified trans 
1 2015 12 10  2  2  2 
2 2015 12 14  3  1 NA 
3 2016  1 6  1  NA NA 
4 2016  1 15  1  NA NA 
5 2016  1 17  1  1 NA 
6 2016  1 25  1  NA NA 

Год, месяц, день находятся в разных колонках. Я хочу построить гистограмму по неделям.

Например, данные с 2016-1-1 по 2016-1-6 будут сгруппированы по оси x, чтобы создать 3 бара: сумма всех созданных, которые соответствуют созданию, проверке, соответствию. Я бы предпочел использовать ggplot2, но все было бы хорошо.

ответ

3

Я рекомендую использовать формат POSIX, если вы хотите работать с временными рядами и ggplot2.

enter image description here

Обратите внимание, что вы должны обращаться в неделю 00, которые в первые дни января, оканчивающиеся на 52-й неделе декабря.

## Fake data/cause you don't provide a reproducible example 
df = data.frame(year = c(rep(2015,14), rep(2016,21)), 
month = c(rep(12,14), rep(01,21)), day = c(seq(18,31,1), seq(01,21,1)), 
create =  sample(c(1,2,3,NA),35, replace = T, prob = c(0.3,0.3,0.3,0.1)), 
verified = sample(c(1,2,3,NA),35, replace = T, prob = c(0.1,0.1,0.1,0.7)), 
trans = sample(c(1,2,3,NA),35, replace = T, prob = c(0.1,0.2,0.1,0.6))) 

# Add of week information 
df$date_posix = as.POSIXct(paste0(df$year, "-", df$month, "-", df$day)) 
df$week = strftime(df$date_posix ,format="%W") 

# summarize 
require(plyr) 
df_sum = ddply(df, "week", summarize, 
create_sum = sum(create, na.rm = T), 
verified_sum = sum(verified, na.rm = T), 
trans_sum = sum(trans, na.rm = T)) 

# melt 
require(reshape2) 
df_sum_melt = melt(df_sum, id = "week") 

# plot 
require(ggplot2) 
ggplot(df_sum_melt, aes(x = week, y = value, fill = variable)) + 
geom_bar(stat ="identity", position = "dodge") 
+0

спасибо! это очень помогло! – steve

Смежные вопросы