dataframe - subset dataset by matching in r -


i have bigger dataset follows:

l = 9 loc <- c(paste('loc', 1:l, sep = ''))  vloc <- c(rep(loc, each=2))  qi <- c(  13, 12, 27, 20, 16, 18,  14, 17, 15, 22, 21, 26,12, 14, 11,    18,  8, 24  )     afreq <- c( 0.308, 0.4, 0.041, 0.5, 0.125, 0.5,0.139, 0.2, 0.219, 0.2,0.176,      0.33,0.358, 0.4, 0.274, 0.5, 0.173, 0.15)     loctab <- data.frame(vloc = vloc, qi = qi, afreq = afreq) loctab      vloc     qi afreq 1  loc1     13 0.308 2  loc1     12 0.400 3  loc2     27 0.041 4  loc2     20 0.500 5  loc3     16 0.125 6  loc3     18 0.500 7  loc4     14 0.139 8  loc4     17 0.200 9  loc5     15 0.219 10 loc5     22 0.200 11 loc6     21 0.176 12 loc6     26 0.330 13 loc7     12 0.358 14 loc7     14 0.400 15 loc8     11 0.274 16 loc8     18 0.500 17 loc9      8 0.173 18 loc9     24 0.150 

and smaller dataset follows:

ex1 <-data.frame (loc, qi = c(13, 27, 16, 14, 15, 21, 12, 11,  8) ex1     loc qi 1 loc1 13 2 loc2 27 3 loc3 16 4 loc4 14 5 loc5 15 6 loc6 21 7 loc7 12 8 loc8 11 9 loc9  8 

for each loc, need match qi value between ex1 (small) , loctab (big) , create newtable.

i tried following not not providing correct answer.

 nloct <- loctab[loctab$qi %in%  ex1$qit, ] 

the expected output

nloct <- data.frame (loc, qi = c(13, 27, 16, 14, 15, 21, 12, 11,  8),  afreq = c( 0.308,  0.041,  0.125, 0.139, 0.219,0.176, 0.358,  0.274,  0.173))   loc qi afreq 1 loc1 13 0.308 2 loc2 27 0.041 3 loc3 16 0.125 4 loc4 14 0.139 5 loc5 15 0.219 6 loc6 21 0.176 7 loc7 12 0.358 8 loc8 11 0.274 9 loc9  8 0.173 

you looking sort of call merge():

## e.g. : ## merge(ex1, loctab)[c(2,1,4)] ## or merge(ex1, loctab, by.x=c("loc", "qi"), by.y=c("vloc", "qi"))    loc qi afreq 1 loc1 13 0.308 2 loc2 27 0.041 3 loc3 16 0.125 4 loc4 14 0.139 5 loc5 15 0.219 6 loc6 21 0.176 7 loc7 12 0.358 8 loc8 11 0.274 9 loc9  8 0.173 

Comments