Мне нужно найти индексы для числовых значений 1MM в векторе с примерно 10MM значениями. Я нашел пакет fastmatch
, но когда я использую функцию fmatch()
, я возвращаю только индекс первого совпадения.
Может кто-нибудь помочь мне использовать эту функцию, чтобы найти все значения, а не только первые? Я понимаю, что это основной вопрос, но онлайн-документация довольно скудная, а fmatch
значительно сократило вычислительное время.
Большое спасибо!
Вот некоторые примеры данных - для целей этого упражнения позвоните в этот фрейм данных A:
DateTime Address Type ID
1 2014-03-04 20:21:03 982076970 1 2752394
2 2014-03-04 20:21:07 98174238211 1 2752394
3 2014-03-04 20:21:08 76126162197 1 2752394
4 2014-03-04 20:21:16 6718053253 1 2752394
5 2014-03-04 20:21:17 98210219176 1 2752510
6 2014-03-04 20:21:20 7622877100 1 2752510
7 2014-03-04 20:21:23 2425126157 1 2752510
8 2014-03-04 20:21:23 2425126157 1 2752510
9 2014-03-04 20:21:25 701838650 1 2752394
10 2014-03-04 20:21:27 98210219176 1 2752394
Что я хочу сделать, так это найти количество уникальных значений Type
для каждого Address
. Есть несколько миллионов строк данных с примерно 1MM уникальными значениями адреса... в среднем каждый адрес появляется примерно в 6 раз в наборе данных. И, хотя значения Type
, перечисленные выше, равны 1, они могут принимать любое значение от 0: 5. Я также понимаю, что значения Address
довольно длинные, что добавляет времени, необходимого для сопоставления.
Я пробовал следующее:
uvals <- unique(A$Address)
utypes <- matrix(0,length(uvals),2)
utypes[,1] <- uvals
for (i in 1:length(unique(Address))) {
b <- which(uvals[i] %in% A$Address)
c <- length(unique(A$Type[b]))
utypes[i,2] <- c
}
Однако приведенный выше код не очень эффективен - если я перебираю значения 1MM, я считаю, что это займет 10-15 часов.
Я тоже пробовал это в цикле... но это не намного быстрее.
b <- which(A$Address == uvals[i])
Я знаю, что есть более элегантный/более быстрый способ, я довольно новичок в R и буду признателен за любую помощь.