Использовать преобразование коэффициентов в целые числа:
transform(data, site=as.integer(SiteID), trt=as.integer(TrtID))
Если порядок важен, вы можете отдавать конкретные приказы уровням:
transform(data,
site = as.integer(factor(SiteID, unique(SiteID))),
trt = as.integer(factor(TrtID, unique(c('control', as.character(TrtID))))) - 1L)
Модифицированная версия, группирующая трт-фактор по сайту:
transform(data,
site = as.integer(factor(site_id, unique(site_id))),
trt = unsplit(tapply(trt_id, site_id, function(x)
as.integer(factor(x))), site_id) - 1L)