数据框有20列,我想找到列“a”与其余列的相关性。
如何使用dplyr进行操作?
我知道如何进行个别相关,例如:
test %>%
dplyr::summarize(cor(a, b))
或者summaryrise_each表示意思。
但我怎么能做到相关呢?
两个用例:
答案 0 :(得分:5)
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 source code上的focus_.cor_df()
。
答案 1 :(得分:1)
我不太了解我认为你可能需要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