2015-01-20 4 views
0

У меня есть фрейм данных (df) с 2 столбцами, например.Корреляция между многими переменными в одном столбце

Variable(character):  Value(numeric):  
A      12.25    
A      2.14    
A      31.10    
B      4.6  
B      6.987 
D      74.10 
D      6.17 
D      10.365 
D      54.98 
C      10.47 
C      156.1420 
C      1.69 

Я хотел бы рассчитать корреляцию между каждой переменной. Нечто подобное (значения совершенно случайно:

 A  B   D  C    
A  0.25  0.32  0.1256 0.9    
B  0.9  0.47  0.125 0.144 
D  0.36  0.12  0.87  0.54   
C  0.369 0.147  0.4  0.485   

ответ

3

Предполагая, что переменные имеют все одинаковое количество наблюдений:

cor(as.data.frame(split(df$val, df$var))) 

Производит:

  a   b   c   d 
a 1.0000000 0.3332724 -0.4755813 -0.1367066 
b 0.3332724 1.0000000 -0.9171748 -0.2348487 
c -0.4755813 -0.9171748 1.0000000 0.5713294 
d -0.1367066 -0.2348487 0.5713294 1.0000000 

предположение не относится в ваших данных. Не знаете, как вы собираетесь рассчитать корреляции с неравным числом наблюдений. Вот данные, которые я использовал:

set.seed(1) 
df <- data.frame(var=rep(letters[1:4], each=4), val=runif(16)) 
+0

Действительно, мои данные не имеют такого же количества наблюдений (данные гидрологических измерений). Любая идея, как с этим бороться? – amikoma

+0

@amikoma, являются ли они данными временного ряда? Тогда правильная вещь должна была бы выровнять их все в одном и том же временном ряду, заполняя недостающие значения с помощью NA. Вы скажите мне, как вы ожидаете сравнить A (3 obs) и B (2 obs)? Знаете ли вы что-то о A, которое говорит вам, какие (если есть) наблюдения следует сравнивать с B? – BrodieG

Смежные вопросы