如何在不使用列名的情况下计算R中数据框中一列与所有其他列之间的相关性? 我尝试使用ddply,如果我只使用两个列名,那就可以了。
library(plyr)
ddply(iris, ~Species, summarize, cormat=cor(Sepal.Length,Petal.Width))
但是如何在不使用列名的情况下将第1列与所有其他列进行相关,按类别细分?
答案 0 :(得分:2)
也许是这样的?它为每个物种产生相关矩阵。
by(iris[,1:4], iris$Species, cor)
答案 1 :(得分:0)
您可以使用dplyr
执行此操作library(dplyr)
cormat_res <- iris %>%
group_by(Species) %>%
do(cormat = cor(select(., -matches("Species"))))
> cormat_res[[2]]
[[1]]
Sepal.Length Sepal.Width Petal.Length Petal.Width
Sepal.Length 1.0000000 0.7425467 0.2671758 0.2780984
Sepal.Width 0.7425467 1.0000000 0.1777000 0.2327520
Petal.Length 0.2671758 0.1777000 1.0000000 0.3316300
Petal.Width 0.2780984 0.2327520 0.3316300 1.0000000
[[2]]
Sepal.Length Sepal.Width Petal.Length Petal.Width
Sepal.Length 1.0000000 0.5259107 0.7540490 0.5464611
Sepal.Width 0.5259107 1.0000000 0.5605221 0.6639987
Petal.Length 0.7540490 0.5605221 1.0000000 0.7866681
Petal.Width 0.5464611 0.6639987 0.7866681 1.0000000
[[3]]
Sepal.Length Sepal.Width Petal.Length Petal.Width
Sepal.Length 1.0000000 0.4572278 0.8642247 0.2811077
Sepal.Width 0.4572278 1.0000000 0.4010446 0.5377280
Petal.Length 0.8642247 0.4010446 1.0000000 0.3221082
Petal.Width 0.2811077 0.5377280 0.3221082 1.0000000
答案 2 :(得分:0)
截至
packageVersion("dplyr")
[1] ‘1.0.2’
答案之一中建议的代码结果将返回tibble
iris %>%
group_by(Species) %>%
do(cormat = cor(select(., -matches("Species"))))
# A tibble: 3 x 2
# Rowwise:
Species cormat
<fct> <list>
1 setosa <dbl[,4] [4 × 4]>
2 versicolor <dbl[,4] [4 × 4]>
3 virginica <dbl[,4] [4 × 4]>
要使数据呈矩形,可以
iris_cor <- iris %>%
group_by(Species) %>%
do(cormat = cor(select(., -matches("Species")))) %>%
pull(cormat) %>% melt
您将在L1
变量中编入种类级别。
Var1 Var2 value L1
1 Sepal.Length Sepal.Length 1.0000000 1
2 Sepal.Width Sepal.Length 0.7425467 1
3 Petal.Length Sepal.Length 0.2671758 1
4 Petal.Width Sepal.Length 0.2780984 1
...
我敢肯定,与unnest()
及其朋友可以做到这一点,但是还不知道。希望能引起注意
并发布更好的解决方案