【问题标题】:How can I use summarise_each for correlations in dplyr?如何在 dplyr 中使用 summarise_each 进行相关性?
【发布时间】:2016-09-06 07:16:54
【问题描述】:

一个数据框有 20 列,我想找到列“a”与其余列的相关性。

我如何使用 dplyr 来做到这一点?

我知道如何做这样的个别关联:

test %>%
  dplyr::summarize(cor(a, b))

或 summarise_each 表示平均值。

但是我该如何做相关性呢?

两个用例:

  1. 它计算与数据框中列的相关性。
  2. 它计算与我提到的列的相关性。

【问题讨论】:

    标签: r dplyr


    【解决方案1】:

    corrr 包使用 dplyr 作为后端(并且很容易使用它)通过correlate() %>% focus() 做到这一点:

    library(corrr)
    
    mtcars %>% 
      correlate() %>% 
      focus(mpg)
    #> # A tibble: 10 × 2
    #>    rowname        mpg
    #>      <chr>      <dbl>
    #> 1      cyl -0.8521620
    #> 2     disp -0.8475514
    #> 3       hp -0.7761684
    #> 4     drat  0.6811719
    #> 5       wt -0.8676594
    #> 6     qsec  0.4186840
    #> 7       vs  0.6640389
    #> 8       am  0.5998324
    #> 9     gear  0.4802848
    #> 10    carb -0.5509251
    
    mtcars %>% 
      select(mpg, disp, hp) %>% 
      correlate() %>% 
      focus(mpg)
    #> # A tibble: 2 × 2
    #>   rowname        mpg
    #>     <chr>      <dbl>
    #> 1    disp -0.8475514
    #> 2      hp -0.7761684
    

    focus() 的作用类似于dplyr::select(),只是它从行中排除了任何剩余的列。如果有兴趣,请查看 GitHub 上的focus_.cor_df() here

    【讨论】:

    • 当我使用第一个时,我得到这个错误: pmatch 中的错误(use, c("all.obs", "complete.obs", "pairwise.complete.obs", :
    • 你是如何使用它的?你是直接从GitHub复制代码+粘贴代码还是安装了corrr?
    • 我已经安装了 corrr
    • 如果我可以添加一些非数字列。我不需要使用它们。
    • 也许这就是原因。尝试先删除这些列(例如dat %&gt;% select(-cat1, -cat2, ...) %&gt;% correlate() ...)或选择您感兴趣的列,就像我上面的第二个示例一样。
    【解决方案2】:

    不太了解我认为您可能需要combn 函数的两个用例,但用于:

    我想找出“a”列与其余列的相关性。

    您可以这样做,直接将列a 作为参数之一传递给cor 函数,并使用. 表示其余列:

    library(dplyr)
    df <- data.frame(a = rnorm(5), b = rnorm(5), c = rnorm(5))
    df %>% summarise_each(funs(cor(., df$a)), -a)
    
    #           b          c
    # 1 0.1997687 -0.3541925
    

    如果有非数字列并且您只对数字列感兴趣,您可能需要summarise_if 函数并将条件指定为数字,在这种情况下,只会汇总数字列并计算相应的相关系数:

    df <- data.frame(a = rnorm(5), b = rnorm(5), c = rnorm(5), d = letters[1:5])
    df %>% summarise_if(is.numeric, funs(cor(., df$a)))
    #  a         b           c
    #1 1 0.1153882 -0.03117205
    

    【讨论】:

      猜你喜欢
      • 2016-02-20
      • 1970-01-01
      • 2014-11-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-10-27
      相关资源
      最近更新 更多