Вычитание маленького data.frame из большого data.frame путем группировки переменной - PullRequest
2 голосов
/ 10 ноября 2011

У меня очень большой набор данных

  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, являются факторами.

Я хочу вычесть блочные средства (blockdf $ yld) из каждого набора данных mdf $ 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 в повторениях. Поэтому я хочу написать так, чтобы он мог справиться с ситуацией дисбаланса

Ответы [ 2 ]

4 голосов
/ 10 ноября 2011

Это должно сработать

block_match <- match(mdf$block, blockdf$block)
transform(mdf, yld = yld - blockdf[block_match, 'yld'])
4 голосов
/ 10 ноября 2011

Это должно работать

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
...........................
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...