按组测量之间的相关性
Correlation between measurements by group
我有一个包含不同评分者所做测量的数据框,我想计算评分者之间测量值的相关性。
这是我当前使用虚拟数据的实现:
set.seed(123)
df <- data.table(
groups = rep(seq(1, 4, 1),100),
measurement = runif(400)
)
cormat <- matrix(ncol=length(unique(df$groups)), nrow=length(unique(df$groups)))
for (i in unique(df$groups)){
for (j in unique(df$groups)){
cormat[i,j] <- cor(df[groups==i,]$measurement, df[groups==j,]$measurement)
}}
我讨厌上面的嵌套循环,并且希望找到一个 dplyr/tidyverse 解决我的问题的方法。
预期输出为:
> cormat
[,1] [,2] [,3] [,4]
[1,] 1.0000000 -0.10934904 -0.15159825 0.13237094
[2,] -0.1093490 1.00000000 -0.04278137 -0.02945215
[3,] -0.1515983 -0.04278137 1.00000000 0.04203516
[4,] 0.1323709 -0.02945215 0.04203516 1.00000000
(如果之前有人问过这个问题,我很抱歉,我一直在努力寻找一个好的搜索词)
这是一个tidyverse
方法。
library(tidyverse)
df %>%
arrange(groups) %>%
add_column(index = rep(1:100, times = 4)) %>%
spread(groups, measurement) %>%
select(-index) %>%
cor()
结果
1 2 3 4
1 1.0000000 -0.10934904 -0.15159825 0.13237094
2 -0.1093490 1.00000000 -0.04278137 -0.02945215
3 -0.1515983 -0.04278137 1.00000000 0.04203516
4 0.1323709 -0.02945215 0.04203516 1.00000000
为了分散数据,我们需要索引列有唯一的标识符。
编辑
base R
方法可能是
cor(unstack(df, measurement ~ groups))
我有一个包含不同评分者所做测量的数据框,我想计算评分者之间测量值的相关性。
这是我当前使用虚拟数据的实现:
set.seed(123)
df <- data.table(
groups = rep(seq(1, 4, 1),100),
measurement = runif(400)
)
cormat <- matrix(ncol=length(unique(df$groups)), nrow=length(unique(df$groups)))
for (i in unique(df$groups)){
for (j in unique(df$groups)){
cormat[i,j] <- cor(df[groups==i,]$measurement, df[groups==j,]$measurement)
}}
我讨厌上面的嵌套循环,并且希望找到一个 dplyr/tidyverse 解决我的问题的方法。
预期输出为:
> cormat
[,1] [,2] [,3] [,4]
[1,] 1.0000000 -0.10934904 -0.15159825 0.13237094
[2,] -0.1093490 1.00000000 -0.04278137 -0.02945215
[3,] -0.1515983 -0.04278137 1.00000000 0.04203516
[4,] 0.1323709 -0.02945215 0.04203516 1.00000000
(如果之前有人问过这个问题,我很抱歉,我一直在努力寻找一个好的搜索词)
这是一个tidyverse
方法。
library(tidyverse)
df %>%
arrange(groups) %>%
add_column(index = rep(1:100, times = 4)) %>%
spread(groups, measurement) %>%
select(-index) %>%
cor()
结果
1 2 3 4
1 1.0000000 -0.10934904 -0.15159825 0.13237094
2 -0.1093490 1.00000000 -0.04278137 -0.02945215
3 -0.1515983 -0.04278137 1.00000000 0.04203516
4 0.1323709 -0.02945215 0.04203516 1.00000000
为了分散数据,我们需要索引列有唯一的标识符。
编辑
base R
方法可能是
cor(unstack(df, measurement ~ groups))