我有一个非常大的数据集

  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

两个数据集中除yld之外的所有变量都是因子。

我想从每个mdf $ yld数据集中减去块均值(blockdf $ yld),以便块效果应对应于mdf数据帧中的块。
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

请注意,我的代表有时可能会出现一些不平衡的var。所以我想以可以处理不平衡情况的方式编写它

最佳答案

这应该可以解决问题

block_match <- match(mdf$block, blockdf$block)
transform(mdf, yld = yld - blockdf[block_match, 'yld'])

07-26 02:23