Рассмотрим случайную генерацию числа путем группировки в by
. Анонимная функция использует tryCatch
для by
срезов, которые не имеют записей, что может иметь место для более чем одного фактора. Обязательно используйте достаточно большое число, например 1:10000
, для размещения ваших групп данных.
df_list <- by(tourdf, tourdf[c("sampno", "perno", "triptype")], function(sub) {
sub$tour_number <- tryCatch({
set.seed(sub$sampno[1] + sub$perno[1] + sub$triptype[1])
sample(1:10000, 1, replace=TRUE)
}, error = function(e) return(NA))
return(sub)
})
new_tourdf <- do.call(rbind, df_list)
new_tourdf
# sampno perno tripno plano triptype tour_number
# 1 1032558 1 NA 1 1 111
# 2 1032558 1 6 7 1 111
# 3 1033660 1 NA 1 1 1561
# 4 1033660 1 NA 1 1 1561
# 5 1033660 1 NA 1 1 1561
# 6 1034462 1 NA 1 1 8855
# 7 1034462 2 NA 1 1 5636
# 8 1032558 1 1 2 4 1727
# 9 1032558 1 2 3 4 1727
# 10 1032558 1 4 5 4 1727
# 11 1032558 1 5 6 4 1727
# 12 1032558 1 3 4 5 804