Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- Subtracting small data.frame from large data.frame by grouped a variable
- mdf <- data.frame (sn = 1:40, var = rep(1:10, 4), block = rep(1:4, each = 10),
- yld = c(1:40))
- blockdf <- data.frame(block = 1:4, yld = c(10, 20, 30, 40)) # block means
- for example: value 10 will be substracted from all var within
- first block yld in mdf
- 20 - second block yld in mdf
- and so on
- block_match <- match(mdf$block, blockdf$block)
- transform(mdf, yld = yld - blockdf[block_match, 'yld'])
- newdf <- merge(x=mdf, y=blockdf, by="block", suffixes = c("",".blockmean"))
- newdf$newvr <- newdf$yld-newdf$yld.blockmean
- print(newdf, row.names=FALSE)
- block sn var yld yld.blockmean newvr
- 1 1 1 1 10 -9
- 1 2 2 2 10 -8
- 1 3 3 3 10 -7
- 1 4 4 4 10 -6
- 1 5 5 5 10 -5
- 1 6 6 6 10 -4
- 1 7 7 7 10 -3
- 1 8 8 8 10 -2
- 1 9 9 9 10 -1
- 1 10 10 10 10 0
- 2 11 1 11 20 -9
- 2 12 2 12 20 -8
- ...........................
Add Comment
Please, Sign In to add comment