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
Post a Comment