1

設定

私は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

ここに画像の説明を入力

それを行う方法はありますか?

4

2 に答える 2

0
summarized.correlation = function(d) {
    correlations = cor(d) * 100
    s.correlations = correlations[upper.tri(correlations)]

    namez = apply(combn(colnames(correlations), 2), 2, function(pairs) { do.call(function(...) { paste(..., sep="2")}, as.list(pairs)) })
    names(s.correlations) = namez
    s.correlations
}
于 2015-01-26T18:36:20.377 に答える