私はビートルート '上記の答えはよりエレガントですが、私は同じ問題に取り組んでいて、同じ場所に別の方法で到着しました。私はx、y/p、qのペアを整列させるために "二重溶融"(yum!)を使用したので興味深いと思います。また、溶融物の代わりにtidyr::gather
を示しています。
library(tidyr)
x.df<- data.frame(Year=2001:2004,
x=runif(4,8,9),y=runif(4,8,9),
p=runif(4,3,9),q=runif(4,3,9))
x.df.melt<-gather(x.df,"item","item_val",-Year,-p,-q) %>%
group_by(item,Year) %>%
gather("comparison","comp_val",-Year,-item,-item_val) %>%
filter((item=="x" & comparison=="p")|(item=="y" & comparison=="q"))
> x.df.melt
# A tibble: 8 x 5
# Groups: item, Year [8]
Year item item_val comparison comp_val
<int> <chr> <dbl> <chr> <dbl>
1 2001 x 8.400538 p 5.540549
2 2002 x 8.169680 p 5.750010
3 2003 x 8.065042 p 8.821890
4 2004 x 8.311194 p 7.714197
5 2001 y 8.449290 q 5.471225
6 2002 y 8.266304 q 7.014389
7 2003 y 8.146879 q 7.298253
8 2004 y 8.960238 q 5.342702
プロット文については以下を参照してください。
このアプローチの弱点(およびビートルートのifelse
の使用)は、比較対象のペアが多数ある場合、filter
ステートメントがすぐに扱いにくくなります。私の使用事例では、私はミューチュアルファンドのパフォーマンスをいくつかのベンチマーク指数と比較していました。各ファンドは異なるベンチマークを持っています。私は、ファンドのティッカーをそれぞれのベンチマークとペアにして、left/right_join
を使用するメタデータのテーブルを使ってこれを解決しました。この場合:
#create meta data
pair_data<-data.frame(item=c("x","y"),comparison=c("p","q"))
#create comparison name for each item name
x.df.melt2<-x.df %>% gather("item","item_val",-Year) %>%
left_join(pair_data)
#join comparison data alongside item data
x.df.melt2<-x.df.melt2 %>%
select(Year,item,item_val) %>%
rename(comparison=item,comp_val=item_val) %>%
right_join(x.df.melt2,by=c("Year","comparison")) %>%
na.omit() %>%
group_by(item,Year)
ggplot(x.df.melt2,aes(Year,item_val,color="item"))+geom_line()+
geom_line(aes(y=comp_val,color="comp"))+
guides(col = guide_legend(title = NULL))+
ylab("Value")+
facet_grid(~item)
我々はファセットプロットのラベルとして参照item
秒の名前を保持する新しいグループ化変数の必要がないので。
新しい変数が溶けたdata.frameに追加されますか? –
よろしくお願いいたします –