У меня есть очень большой набор данных с категориальными метками a
и вектором b
, который содержит все возможные метки в наборе данных:
a <- c(1,1,3,2) # artificial data
b <- c(1,2,3,4) # fixed categories
Теперь я хочу найти для каждого наблюдения в a
набор всех остальных категорий (то есть элементы b
, исключая данное наблюдение в a
). Из этих оставшихся категорий я хочу выбрать одну наугад.
Мой подход с использованием цикла
goal <- numeric() # container for results
for(i in 1:4){
d <- setdiff(b, a[i]) # find the categories except the one observed in the data
goal[i] <- sample(d,1) # sample one of the remaining categories randomly
}
goal
[1] 4 4 1 1
Однако это необходимо делать большое количество раз и применять к очень большим наборам данных. У кого-нибудь есть более эффективная версия, приводящая к желаемому результату?
РЕДАКТИРОВАТЬ:
Функция akrun, к сожалению, медленнее, чем исходный цикл. Если у кого-то есть креативная идея с конкурентоспособным результатом, буду рад услышать!