У меня есть набор данных, таких как;
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