2013-11-12 1 views
0

Я хочу рассчитать корреляцию V2 с V3, V4, ..., V18: Это cor (V2, V3, na.rm = TRUE), cor (V2, V4, na. rm = TRUE) и т. д. Каков наиболее эффективный способ сделать это?вычислить корреляцию по каждому столбцу

  V1 V2 V3 V4 V5 V6 V7 V8 V9 V10 V11 V12 V13 V14 V15 V16 V17 V18 
1 141_21311223 2.000 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 
2 44_33331123 2.000 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 
3 247_11131211 2.065 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 
4 33_31122113 2.080 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 
5 277_21212111 2.090 0 0 0 0 0 1 1 1 1 0 0 0 0 0 0 0 
+0

Благодаря Ананда, ты прав, нет na.rm, я должен использовать «USE =„complete.obs“» – user2783615

ответ

2

Преобразование моего комментария к ответу, один простой подход будет использовать позиции столбцов в sapply высказывания:

sapply(3:ncol(mydf), function(y) cor(mydf[, 2], mydf[, y],)) 

Это должно создать вектор выходного значения. измените sapply на lapply, если вы предпочитаете list в качестве выхода.

Я никогда не видел na.rm для cor хотя ....

+0

Если число столбца не очень большой, вероятно, более эффективно использовать 'cor (mydf [, - 1])' и подмножество результата. См. Мои тесты [в этом ответе] (http://stackoverflow.com/a/18535302/1412059). – Roland