Я использую функцию binning
из пакета sm
, чтобы взять построенные координаты x, y и поместить их в отдельные ячейки. Это создает частотную таблицу, в которой количество бит определяется путем ввода пользователем SampleSize.Преобразование таблицы в список значений
num_bins <- max(x_max,y_max)/SampleSize
bin_breaks <- matrix(c(bins,bins), num_bins+1,2)
frequency <- binning(combo_points,breaks=bin_breaks,nbins=num_bins)$table.freq
Вывод моей таблицы «частоты» в формате ...
x1 x2 x3 x4 x5...
y1 0 5
y2 0
y3 0
y4
y5
.
.
.
Но мне нужно, чтобы преобразовать его в формат списка для всех значений х и у ...
x y count
1 1 0
1 2 0
1 3 0
2 1 5
. . .
. . .
Я хочу преобразовать эту таблицу в список data.frame из x, y, count, где x и y теперь действительно являются только координатой x, y самого бина. В настоящее время я делаю это, создавая файл data.frame, чтобы перечислить координаты bin (freq_points $ x и freq_points $ y), а затем запустить цикл for, который ищет данные в таблице, которые соответствуют значениям для каждой строки my freq_points data.frame для создания нового вектора (z), для которого каждая итерация цикла for добавляется ... но с более чем 3,4 миллионами ящиков этот процесс занимает несколько часов.
for (i in 1:length(frequency)){
z<-append(z,frequency[freq_points$y[i],freq_points$x[i]])}
Может кто-то порекомендовать более элегантное решение? Есть ли более прямой способ конвертировать из таблицы в список? Я очень новичок в R, возможно, я неправильно использую термины «таблица» и «список». Я надеюсь, что приведенные выше форматы помогут прояснить мой вопрос.
У меня были некоторые проблемы при применении ответ ниже моих данных, которые не имеют x1, x2, y1, y2, так как фактические строки и заголовков столбцов имен. Я использовал их, чтобы попытаться понять, но, похоже, вызвало больше путаницы. Для этого прошу прощения. Переход с небольшой матрицей, предоставляемой @neerajt ... Я не понимаю результат и почему подсчитываются count.1, count.2 и count.3. Ни один из столбцов «count» не может использоваться с координатами x, y. Не могли бы вы пролить свет на это?
freq <- matrix(c(0,0,1,5,0,1,1,0,1,1,1,0),nrow=4,ncol=3)
freq
[,1] [,2] [,3]
[1,] 0 0 1
[2,] 0 1 1
[3,] 1 1 1
[4,] 5 0 0
counts <- unlist(freq)
xname <- rep(c(1:ncol(freq)),nrow(freq))
yname <- rep(c(1:nrow(freq)),ncol(freq))
z <- data.frame(x=xname, y=yname, count=counts, row.names=NULL)
z
x y count.1 count.2 count.3
1 1 1 0 0 1
2 2 2 0 1 1
3 3 3 1 1 1
4 1 4 5 0 0
5 2 1 0 0 1
6 3 2 0 1 1
7 1 3 1 1 1
8 2 4 5 0 0
9 3 1 0 0 1
10 1 2 0 1 1
11 2 3 1 1 1
12 3 4 5 0 0
можете ли вы 'dput' частоту – Ananta
вы пробовали' as.data.frame (frequency) '? – MichaelChirico
as.data.frame не изменил структуру данных из таблицы на 3-столбцовый (x, y, z) data.frame. – braxtonlewis