tidyr::gather を使用した変換及びtidyr::pivot_longer
概要
積み上げグラフを書くためにgather を使用してデータを変換する。gather はワイド型のデータをロング型に変換してくれる。以下の例では第二列から第九列までを一列にまとめる。指定に際しては列名を使用する。引数、c("10", "20", "30", "40", "50", "60", "70", "80")がそれに相当する。ロング型とワイド型については以下を参照のこと。
tidyr::gather()を使用したサンプルコード
df <- data.frame(t=xts::last(index(v),length_graph),
# o=xts::last(diff(all[,1]-all[,3],t=all[,3]),length_graph),
a=xts::last(v[,1],length_graph),
b=xts::last(v[,2],length_graph),
c=xts::last(v[,3],length_graph),
d=xts::last(v[,4],length_graph),
e=xts::last(v[,5],length_graph),
f=xts::last(v[,6],length_graph),
g=xts::last(v[,7],length_graph),
h=xts::last(v[,8],length_graph)
# or=xts::last(all[,2],length_graph)*multi,
# kr=xts::last(all[,2],length_graph)*multi
)
for(i in seq(1,8,1)){
colnames(df)[i+1] <- as.character(i*10)
}
df.melt <- df %>% tidyr::gather(variable,value,c("10", "20", "30", "40", "50", "60", "70", "80"))
#
#
#
df <- df.melt
# in order to overlayer graph use ggplot(NULL) to create base object.
g <- ggplot(NULL)
# g <- ggplot(df, aes(x = t, y = value, fill = variable))
g <- g + scale_fill_brewer(palette="Spectral",na.value = "black",name = "age group", direction=-1,labels = c("=<19",">=20",">=30",">=40",">=50",">=60",">=70",">=80"))
g <- g + geom_bar(data=df,aes(x = t, y = value, fill = variable),stat = "identity")
plot(g)
上記の例は単純にt列だけを除いて変換しても良い。その場合は
df.melt <- df %>% tidyr::gather(variable,value,-t)
となる。結果は同様になるはずである。ちなみにpivot_longerer を使用した場合は以下の通りとなるはずである。
df.melt <- df %>% tidyr::pivot_longer(cols=-t,names_to="variable",values_to="values")
変換前データ
> head(df)
t 10 20 30 40 50 60 70 80
2022-04-20 2022-04-20 2202 1114 1194 1000 547 234 165 122
2022-04-21 2022-04-21 2126 1223 1247 1066 527 205 179 136
2022-04-22 2022-04-22 1640 996 995 847 459 205 135 115
2022-04-23 2022-04-23 1661 982 965 854 486 208 119 111
2022-04-24 2022-04-24 1664 827 863 822 386 163 112 98
2022-04-25 2022-04-25 1044 545 564 454 265 131 77 56
変換後データ
> head(df.melt[df.melt$variable=='10',])
t variable value
1 2022-04-20 10 2202
2 2022-04-21 10 2126
3 2022-04-22 10 1640
4 2022-04-23 10 1661
5 2022-04-24 10 1664
6 2022-04-25 10 1044
> head(df.melt[df.melt$variable=='20',])
t variable value
80 2022-04-20 20 1114
81 2022-04-21 20 1223
82 2022-04-22 20 996
83 2022-04-23 20 982
84 2022-04-24 20 827
85 2022-04-25 20 545
> head(df.melt[df.melt$variable=='80',])
t variable value
554 2022-04-20 80 122
555 2022-04-21 80 136
556 2022-04-22 80 115
557 2022-04-23 80 111
558 2022-04-24 80 98
559 2022-04-25 80 56