Hi:

The use of %in% may be more what you want. Consider the following (data
faked
because your data set could not be conveniently read into R...and Bill
Dunlap is
right, why would you want these to be matrices? But I digress...):

# Generate gene names
gene1 <- paste(c(3884, 3491, 3709, 3371, 3594), "_f_at", sep = '')
gene2 <- paste(c(3813, 3709, 3491, 3594, 3371), "_f_at", sep = '')
# Provide some 'data' that has some verisimilitude to yours...
xyz <- matrix(round(0.995 + runif(20, -0.001, 0.001), 7), nrow = 5)
ds1 <- data.frame(gene1 = gene1, gene2 = gene2, xyz)
names(ds1)[3:6] <- c('PCC', 'PCC3', 'PCC23', 'PCC123')
ds1
#       gene1     gene2       PCC      PCC3     PCC23    PCC123
# 1 3884_f_at 3813_f_at 0.9946656 0.9952888 0.9952047 0.9942946
# 2 3491_f_at 3709_f_at 0.9944245 0.9940811 0.9945579 0.9947879
# 3 3709_f_at 3491_f_at 0.9947104 0.9953734 0.9952654 0.9958892
# 4 3371_f_at 3594_f_at 0.9957142 0.9953967 0.9952465 0.9940917
# 5 3594_f_at 3371_f_at 0.9959341 0.9955436 0.9951310 0.9959632
# your results may vary...

# Do it again for the second data set...
gene1 <- paste(c(3491, 3709, 3813, 3884, 3371, 3594), '_f_at', sep = '')
gene2 <- paste(c(3709, 3491, 3884, 3813, 3594, 3371), '_f_at', sep = '')
uvw <- matrix(round(0.995 + runif(24, -0.001, 0.001), 7), nrow = 6)
ds2 <- data.frame(gene1 = gene1, gene2 = gene2, uvw)
names(ds2)[3:6] <- c('PCC', 'PCC3', 'PCC23', 'PCC123')
ds2
#       gene1     gene2        X1        X2        X3        X4
# 1 3491_f_at 3709_f_at 0.9954095 0.9955172 0.9957099 0.9953413
# 2 3709_f_at 3491_f_at 0.9943942 0.9940585 0.9949269 0.9941129
# 3 3813_f_at 3884_f_at 0.9956359 0.9948163 0.9949249 0.9954146
# 4 3884_f_at 3813_f_at 0.9941586 0.9952573 0.9946768 0.9957190
# 5 3371_f_at 3594_f_at 0.9950113 0.9950989 0.9941181 0.9942739
# 6 3594_f_at 3371_f_at 0.9956282 0.9942188 0.9948331 0.9957369

# Pick out the genes you want to match in the second data frame:
mygenes <- ds1[1:2, 1:2]
mygenes
#       gene1     gene2
# 1 3884_f_at 3813_f_at
# 2 3491_f_at 3709_f_at

# These should match to rows 4 and 1 of ds2.

# Do the select...
genesub <-
  with(ds2, ds2[gene1 %in% mygenes$gene1 & gene2 %in% mygenes$gene2, 3:6])

# Answer:
genesub
> genesub
      gene1     gene2       PCC      PCC3     PCC23    PCC123
1 3491_f_at 3709_f_at 0.9954095 0.9955172 0.9957099 0.9953413
4 3884_f_at 3813_f_at 0.9941586 0.9952573 0.9946768 0.9957190

HTH,
Dennis

On Sun, Jan 24, 2010 at 10:47 AM, Amit <amitkumartiw...@gmail.com> wrote:

> Hi! All,
>
> I am trying to fetch rows from a data frame which matches to first 2
> columns of another data frame. Here is the example what I am trying to
> do:
> > ptable=read.table(file="All.txt",header=T,sep="\t")
> > ptable=as.matrix(ptable)
> > dim(ptable)
> [1] 9275    6
> > head(ptable)
>     Gene1       Gene2       PCC         PCC3        PCC23       PCC123
> [1,] "3813_f_at" "3884_f_at" "0.9956842" "0.9955455" "0.9956513"
> "0.9956171"
> [2,] "3884_f_at" "3813_f_at" "0.9956842" "0.9955455" "0.9956513"
> "0.9956171"
> [3,] "3491_f_at" "3709_f_at" "0.9952116" "0.9951588" "0.9951601"
> "0.9950864"
> [4,] "3709_f_at" "3491_f_at" "0.9952116" "0.9951588" "0.9951601"
> "0.9950864"
> [5,] "3371_f_at" "3594_f_at" "0.9946206" "0.9945342" "0.9946246"
> "0.9946592"
> [6,] "3594_f_at" "3371_f_at" "0.9946206" "0.9945342" "0.9946246"
> "0.9946592"
> > table=read.table(file="All_GPYeast_m.txt",header=T,sep="\t")
> > table=as.matrix(table)
> > dim(table)
> [1] 9275    6
> > head(table)
>     Gene1       Gene2       PCC         PCC3        PCC23       PCC123
> [1,] "3491_f_at" "3709_f_at" "0.9953142" "0.9950756" "0.9954676"
> "0.9952902"
> [2,] "3709_f_at" "3491_f_at" "0.9953142" "0.9950756" "0.9954676"
> "0.9952902"
> [3,] "3813_f_at" "3884_f_at" "0.9951781" "0.9953901" "0.9959256"
> "0.9958152"
> [4,] "3884_f_at" "3813_f_at" "0.9951781" "0.9953901" "0.9959256"
> "0.9958152"
> [5,] "3371_f_at" "3594_f_at" "0.9946130" "0.9938905" "0.9945572"
> "0.9945285"
> [6,] "3594_f_at" "3371_f_at" "0.9946130" "0.9938905" "0.9945572"
> "0.9945285"
>
> Now, I wish to pick column 1&2 from 'ptable' and their coresponding
> columns from 'table' and store it in a variable. I did following and
> got error
> > PCC=apply(ptable[,c(1,2)],1,function(x)table[x[1],x[2]])
> Error in FUN(newX[, i], ...) : subscript out of bounds
>
> I was expecting something like this
> >head(PCC)
> [1,] "3813_f_at" "3884_f_at" "0.9951781" "0.9953901" "0.9959256"
> "0.9958152"
> [2,] "3884_f_at" "3813_f_at" "0.9951781" "0.9953901" "0.9959256"
> "0.9958152"
> ---------------------
> ---------------------
>
> Please, help!
>
> regards
> Amit
>
> ______________________________________________
> 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.
>

        [[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.

Reply via email to