# Hello # I have a question regarding pairwise calculations of a matrix using a "for-loop." # Below I have a matrix "X" with 8 columns. These are genotypic data so Column1 & Column2 is # a unit, Column3 & Column4 is a unit, Column5 & Column6 is a unit, and Coulmn7 & 8 is a unit. # I have a loop designed to calculate the number of times an individual in Column"i" & Column"j" # has the same value and the same individual has two values that are the same in Column"k" & Column"l" . # I have another seires of code that adds a 2 in the poper location of a data frame called "result.df". # I have written a loop that accomplishes this "pair of columns" pairwise comparison, but it also compares # some of the "pairs of Columns" to themselves. Is there a way to get around this?
# creation of the data matrix c1<- c(1,4,3,2,4,1,3,2,4,3) c2<- c(2,4,3,4,4,3,4,1,3,2) c3<- c(1,3,2,4,4,3,4,4,2,2) c4<- c(2,3,2,3,1,3,2,4,4,3) c5<- c(1,2,1,1,2,2,2,3,2,1) c6<- c(3,2,4,3,1,1,2,3,3,4) c7<- c(1,2,1,2,3,2,3,2,1,2) c8<- c(1,2,2,3,2,3,3,4,1,2) X<-cbind(c1,c2,c3,c4,c5,c6,c7,c8) X ## Creation of the result dataframe result<- matrix(0,16,2) result.df<-data.frame(result) result.df[,1] <- c(1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4) result.df[,2] <- c(1,2,3,4,1,2,3,4,1,2,3,4,1,2,3,4) names(result.df)[1]<-"L(A)a(i)" names(result.df)[2]<-"L(B)a(j)" result.df ### The loop written to find Double Homozygotes for (a in seq(1,(ncol(X)-3), by=2)){ for (b in seq(3,(ncol(X)-1), by=2)){ for (i in a){ j <- a+1 for (k in b){ l <- b+1 match.rows <- ((X [,i] == X [, j] ) & ( X [,k] == X [, l])) double_homo_i <- X [match.rows, i] double_homo_k <- X [match.rows, k] double_homo<- cbind( double_homo_i, double_homo_k) double_homo.df<-data.frame(double_homo,Counts=2) names(double_homo.df)[1]<-"L(A)a(i)" names(double_homo.df)[2]<- "L(B)a(j)" # Below takes each round throught he loop and puts in the result.dfdataframe. count<-double_homo.df almost.df<-aggregate(count$Counts, list(count[,1],count[,2]), FUN=sum) temp<-order(almost.df$Group.1) final.df<-almost.df[temp,] names(final.df)[1]<-"L(A)a(i)" names(final.df)[2]<-"L(B)a(j)" result.df<-merge(result.df,final.df,by=c("L(A)a(i)","L(B)a(j)"), all.x=T) } } } } # here is the result I get result.df # L(A)a(i) L(B)a(j) C1C2~C3C4 C1C2~C5C6 C1C2~C7C8 C3C4~C3C4 C3C4~C5C6 C3C4~C7C8 C5C6~C3C4 C5C6~C5C6 C5C6~C7C8 # 1 1 1 NA NA NA NA NA NA NA NA NA # 2 1 2 NA NA NA NA NA NA NA NA NA # 3 1 3 NA NA NA NA NA NA NA NA NA # 4 1 4 NA NA NA NA NA NA NA NA NA # 5 2 1 NA NA NA NA NA NA NA NA NA # 6 2 2 NA NA NA 2 NA NA NA 4 2 # 7 2 3 NA NA NA NA NA NA 2 NA 2 # 8 2 4 NA NA NA NA NA NA NA NA NA # 9 3 1 NA NA NA NA NA NA NA NA NA # 10 3 2 2 NA NA NA 2 2 NA NA NA # 11 3 3 NA NA NA 4 NA NA NA 2 NA # 12 3 4 NA NA NA NA NA NA 2 NA NA # 13 4 1 NA NA NA NA NA NA NA NA NA # 14 4 2 NA 2 2 NA NA NA NA NA NA # 15 4 3 2 NA NA NA 2 NA NA NA NA # 16 4 4 NA NA NA 2 NA NA NA NA NA # Here is the Result I am looking for. L(A)a(i) L(B)a(j) C1C2~C3C4 C1C2~C5C6 C1C2~C7C8 C3C4~C5C6 C3C4~C7C8 C5C6~C7C8 # 1 1 1 NA NA NA NA NA NA # 2 1 2 NA NA NA NA NA NA # 3 1 3 NA NA NA NA NA NA # 4 1 4 NA NA NA NA NA NA # 5 2 1 NA NA NA NA NA NA # 6 2 2 NA NA NA NA NA 2 # 7 2 3 NA NA NA NA NA 2 # 8 2 4 NA NA NA NA NA NA # 9 3 1 NA NA NA NA NA NA # 10 3 2 2 NA NA 2 2 NA # 11 3 3 NA NA NA NA NA NA # 12 3 4 NA NA NA NA NA NA # 13 4 1 NA NA NA NA NA NA # 14 4 2 NA 2 2 NA NA NA # 15 4 3 2 NA NA 2 NA NA # 16 4 4 NA NA NA NA NA NA # Any help or ideas would be greatly appreciated # Thanks in advance # Luke Neraas # [EMAIL PROTECTED] # University of Alaska Fairbanks # School of Fisheries and Ocean Sciences # 11120 Glacier Highway # UAF Fisheries Division # Juneau, AK 99801 [[alternative HTML version deleted]] ______________________________________________ R-help@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide http://www.R-project.org/posting-guide.html and provide commented, minimal, self-contained, reproducible code.