У меня есть список событий с координатами (x, y), где x составляет от 1 до 100 и y от 1 до 86. Существует (часто много) дубликатов каждой координаты. Я хочу заполнить матрицу (эффективно сетку чисел) с подсчетами каждой координаты. Как мне это сделать?R: Нужно заполнить матрицу подсчетами координат (из фрейма данных со списком координат, некоторые из которых являются дубликатами)
Прямо сейчас, моя лучшая попытка:
s=matrix(data=NA,nrow=n,ncol=k)
for(i in 1:n){
for(j in 1:k){
s[i,j]=nrow(subset(data,x_column==i & y_column==j))
}
}
Это работает для небольших (~ 10000 строк) кадров данных, но я хотел бы, чтобы запустить его для кадра данных с почти 3 миллиона строк, и мой метод слишком медленный.
Edit (данные):
n=86;k=100;
x_column y_column
54 30
51 32
65 34
19 46
51 27
45 60
62 31
64 45
16 69
31 33
Спасибо, ребята!
Редактировать: ну, оказывается, программа была достаточно быстрой для моих нужд - мое рабочее пространство было просто увязло с множеством данных, и это замедляло все, что я пытался сделать. Поэтому мой метод работает, но хорошо знать альтернативные способы заполнения матрицы. Я загрузил первые 10 строк; может кто-то сделать тест скорости?
Было бы хорошо, если бы вы добавили пример набора данных, так что мы можем просто попытаться и скорость-тест. Как правило, вы хотели бы использовать семейство функций 'apply',' sapply' вместо циклов 'for'. В качестве альтернативы, вы можете даже распараллелить его, если у вас есть несколько ядер, используя 'foreach' – OganM
, как я должен загружать/форматировать данные? просто скопировать/вставить? У меня есть набор данных, который я сокращаю до 100 строк. – Colin
копия пасты первых нескольких строк всегда помогает – OganM