設定
私はdata.frame
いくつかのがらくたでいっぱいです:
> set.seed(12345)
> d <- data.frame(x=rnorm(100), y=rnorm(100), z=rnorm(100)) %>% tbl_df
> d %>% head(3)
Source: local data frame [6 x 3]
x y z
1 0.5855288 0.2239254 -1.4361457
2 0.7094660 -1.1562233 -0.6292596
3 -0.1093033 0.4224185 0.2435218
ここで、変数間の関係をいくつか見てみたいと思います。
> '%cor%' <- function(x,y) round(100 * cor(x,y, use='pairwise'), 1)
> d %>% summarize(x %cor% y, y %cor% z, lag(x) %cor% z)
Source: local data frame [1 x 3]
x %cor% y y %cor% z lag(x) %cor% z
1 10.4 -12.7 7.8
問題
列の名前がデータ自体よりも大きくなっています。
悪い解決策 #1: マニュアル名
私ができることの 1 つは、自分で列に名前を付けることですが、これには追加の簿記が必要になるため、すぐに面倒になります。
> d %>% summarize(x2y=x %cor% y, y2z=y %cor% z, Lx2y=lag(x) %cor% z)
Source: local data frame [1 x 3]
x2y y2z Lx2y
1 10.4 -12.7 7.8
悪い解決策 #2: 転置
私ができるもう一つのことは転置です:
> d %>% summarize(x %cor% y, y %cor% z, lag(x) %cor% z) %>% t
[,1]
x %cor% y 10.4
y %cor% z -12.7
lag(x) %cor% z 7.8
問題は、グループ化を開始すると、列がダウンキャストされることです。
> d %>% mutate(group=cut(z, c(-Inf,0,Inf))) %>%
group_by(group) %>%
summarize(x %cor% y, y %cor% z, lag(x) %cor% z) %>% t
[,1] [,2]
group "(-Inf,0]" "(0, Inf]"
x %cor% y " 6.9" "14.9"
y %cor% z "-19.8" "-17.3"
lag(x) %cor% z " 3.9" "-6.3"
print.data.frame(...)
シリーズを縦ではなく横に表示したいことを伝える方法はありますか?
悪い解決策 #3: grid.table
私が試したもう1つのことは、これを使用してレンダリングgridExtra::grid.table
することですが、列名を垂直に回転させることができればいいでしょう:
> gt <- function(df) {
grid.newpage()
df %>% grid.table(core.just='right', show.rownames=F)
}
> d %>% summarize(x %cor% y, y %cor% z, lag(x) %cor% z) %>% gt
それを行う方法はありますか?