R - корреляция между подмножествами столбцов - ссылочная текущая строка - PullRequest
1 голос
/ 19 декабря 2011

У меня есть набор данных, таких как;

       name      Exp1Res1   Exp1Res2   Exp1Res3   ExpRes1   Exp2Res2   Exp3Res3

[1]     ID1         5          7            9          7          9       2 

[2]     ID2         6          4            2          9          5       1

[3]     ID3         4          9            9          9          11      2

Мне нужно определить корреляцию между экспериментом 1 и 2 для каждой строки.Поскольку в моем наборе данных (FullSet) фактически 37 столбцов и 100 000 строк, мое первоначальное решение циклического обхода слишком медленное (см. Ниже), поэтому я хотел оптимизировать.

Мое исходное решение было;

df <- data.frame(matrix(ncol = 5, nrow = dim(FullSet)[1]))
names(df)<-c("ID","pearson","spearman")
for (i in  seq(1, dim(FullSet)[1]))  
{
    pears=cor(as.numeric(t(FullSet[i,2:19])),as.numeric(t(FullSet[i,20:37])), method="pearson")
    spear=cor(as.numeric(t(FullSet[i,2:19])),as.numeric(t(FullSet[i,20:37])), method="pearson")
    df[i,]<-c(FullSet[i,1],pears,spear)
}

Мне кажется, что-то вроде этого должно работать;

FullSet$pearson<-cor(as.numeric(t(FullSet[,2:19])),as.numeric(t(FullSet[,20:37])), method="pearson")

, но я не знаю, можно ли / как ссылаться только на текущую строку в транспонировании -

 t(FullSet[,2:19]) - which should read something like t(FullSet[<currow>,2:19]). 

Была бы признательна за помощь - я не знаю, верен ли мой подход.

Вывод должен выглядеть примерно так (результаты неверны - например, только)

       name      Pearson     Spearman

[1]     ID1         0.8          .75 

[2]     ID2         0.9          .8

[3]     ID3         0.85         .7

1 Ответ

4 голосов
/ 19 декабря 2011

как насчет перевода его в формат:

ID  EXP  Res
1    1    .
1    1    .
1    2    .
1    2    .

с помощью reshape и последующего разрешения plyr выполнить работу:

require(plyr)
ddply(df, .(ID, EXP), summarize, cor(...))

это было бы возможно?если вы делаете это для копейщика и для Перасона отдельно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...