2015-06-22 6 views
2

Я хотел бы скорректировать две переменные и выводить выходные данные отдельно для уровней третьей переменной.Корреляция по уровням переменной в R

Мои данные аналогичны этому примеру:

var1 <- c(7, 8, 9, 10, 11, 12) 
var2 <- c(18, 17, 16, 15, 14, 13) 
categories <- c(1, 2, 3, 1, 2, 3) 

И я хочу соотнести var1 с var2 в пределах категорий, так что результаты будут показывать корреляцию значений var1 и var2 для категории 1 отдельно из категории 2 и категории 3.

в SAS, я хотел бы сделать:

PROC CORR DATA=x; 
    BY CATEGORY 
    VAR VAR1 
    WITH VAR2; 
RUN; 

ответ

1

Вы можете поместить свои записи в data.frame, а затем разделить на Cate ogies, а затем выполните корреляцию для каждой из категорий.

sapply(
    split(data.frame(var1, var2), categories), 
    function(x) cor(x[[1]],x[[2]]) 
) 

Это может выглядеть красивее с dplyr библиотеки

library(dplyr) 
data.frame(var1=var1, var2=var2, categories=categories) %>% 
    group_by(categories) %>% 
    summarize(cor= cor(var1, var2)) 
+0

Или использовать 'предшественник dplyr' в' 'plyr' ddply (DF" catagories ", суммировать, cor = cor (var1, var2))'. – Kevin

0

Вы также можете использовать by

sapply(by(cbind(var1, var2), categories, FUN=cor),`[`,2) 
#1 2 3 
#-1 -1 -1 
Смежные вопросы