Guest User

Untitled

a guest
Aug 15th, 2018
68
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.11 KB | None | 0 0
  1. Subtracting small data.frame from large data.frame by grouped a variable
  2. mdf <- data.frame (sn = 1:40, var = rep(1:10, 4), block = rep(1:4, each = 10),
  3. yld = c(1:40))
  4.  
  5. blockdf <- data.frame(block = 1:4, yld = c(10, 20, 30, 40)) # block means
  6.  
  7. for example: value 10 will be substracted from all var within
  8. first block yld in mdf
  9. 20 - second block yld in mdf
  10.  
  11. and so on
  12.  
  13. block_match <- match(mdf$block, blockdf$block)
  14. transform(mdf, yld = yld - blockdf[block_match, 'yld'])
  15.  
  16. newdf <- merge(x=mdf, y=blockdf, by="block", suffixes = c("",".blockmean"))
  17. newdf$newvr <- newdf$yld-newdf$yld.blockmean
  18. print(newdf, row.names=FALSE)
  19. block sn var yld yld.blockmean newvr
  20. 1 1 1 1 10 -9
  21. 1 2 2 2 10 -8
  22. 1 3 3 3 10 -7
  23. 1 4 4 4 10 -6
  24. 1 5 5 5 10 -5
  25. 1 6 6 6 10 -4
  26. 1 7 7 7 10 -3
  27. 1 8 8 8 10 -2
  28. 1 9 9 9 10 -1
  29. 1 10 10 10 10 0
  30. 2 11 1 11 20 -9
  31. 2 12 2 12 20 -8
  32. ...........................
Add Comment
Please, Sign In to add comment