Просто «объедините» сводку tapply
обратно с исходным фреймом данных с merge
.
Поскольку вы не предоставили пример данных, я сделал несколько.Измените соответственно.
n = 1000
id = sample(1:10, n, replace=T)
year = sample(2000:2011, n, replace=T)
destination = sample(LETTERS[1:6], n, replace=T)
`destination-year` = paste(destination, year, sep='-')
dat = data.frame(id, year, destination, `destination-year`)
Теперь сведите ваши сводки в таблицу.Обратите внимание, как я переформатировал фрейм данных и сделал так, чтобы имена соответствовали исходным данным.
incumbents = tapply(id, `destination-year`, function(x) length(unique(x)))
incumbents = data.frame(`destination-year`=names(incumbents), incumbents)
Наконец, вернемся к исходным данным:Кстати, вместо объединения destination
и year
в третью переменную, как вы, похоже, и сделали, tapply
может обрабатывать обе переменные непосредственно в виде списка:
incumbents = melt(tapply(id, list(destination=destination, year=year), function(x) length(unique(x))))