2016-04-14 5 views
0

Ich habe einige Probleme beim Sortieren meines Datasets in Bins, die auf dem numerischen Wert des Datenwerts basieren. Ich habe es mit der Funktion shingle aus der lattice versucht, die es genau zu teilen scheint.R Teilungsdatensatz in entfernte Bins?

Ich kann nicht scheinen, die gewünschte Ausgabe zu extrahieren, die das Wissen ist, wie die Daten in die vordefinierten Bins aufgeteilt werden. Ich scheine es nur drucken zu können.

bin_interval = matrix(c(0.38,0.42,0.46,0.50,0.54,0.58,0.62,0.66,0.70,0.74,0.78,0.82,0.86,0.90,0.94,0.98, 
         0.40,0.44,0.48,0.52,0.56,0.60,0.64,0.68,0.72,0.76,0.80,0.84,0.88,0.92,0.96,1.0), 
         ncol = 2, nrow = 16) 
bin_1 = shingle(data_1,intervals = bin_interval) 

Wie extrahieren i der Intervalle, die durch die shingle Funktion ausgegeben wird, und es ist nicht nur Drucken ...

die Intervalle wobei die Ausgabe:

Intervals: 
    min max count 
1 0.38 0.40  0 
2 0.42 0.44  6 
3 0.46 0.48 46 
4 0.50 0.52 251 
5 0.54 0.56 697 
6 0.58 0.60 1062 
7 0.62 0.64 1215 
8 0.66 0.68 1227 
9 0.70 0.72 1231 
10 0.74 0.76 1293 
11 0.78 0.80 1330 
12 0.82 0.84 1739 
13 0.86 0.88 2454 
14 0.90 0.92 3048 
15 0.94 0.96 8936 
16 0.98 1.00 71446 

Als variable, das kann zu einer anderen Funktion gefüttert werden.

+0

Gibt es einen Grund, warum Sie 'cut' oder' findInterval' nicht verwenden? – BenBarnes

+0

Nicht genau. Die einzige Ausgabe, die mich interessiert, ist die Aufteilung der Daten in diese Bins. Die Intervalle müssen einem Klassifikator zugeführt werden. – Lamda

+1

Sie haben auch nicht angrenzende Intervalle. Was ist mit Potentialwerten zwischen beispielsweise 0,40 und 0,42? – BenBarnes

Antwort

1

Die Funktion shingle() gibt die Werte unter Verwendung von attributes() zurück.

Die Werte werden speziell von attr(bin_1,"levels") angegeben. So

:

set.seed(1337) 
data_1 = runif(100) 

bin_interval = matrix(c(0.38,0.42,0.46,0.50,0.54,0.58,0.62,0.66,0.70,0.74,0.78,0.82,0.86,0.90,0.94,0.98, 
         0.40,0.44,0.48,0.52,0.56,0.60,0.64,0.68,0.72,0.76,0.80,0.84,0.88,0.92,0.96,1.0), 
         ncol = 2, nrow = 16) 
bin_1 = shingle(data_1,intervals = bin_interval) 

attr(bin_1,"levels") 

Das gibt:

 [,1] [,2] 
[1,] 0.38 0.40 
[2,] 0.42 0.44 
[3,] 0.46 0.48 
[4,] 0.50 0.52 
[5,] 0.54 0.56 
[6,] 0.58 0.60 
[7,] 0.62 0.64 
[8,] 0.66 0.68 
[9,] 0.70 0.72 
[10,] 0.74 0.76 
[11,] 0.78 0.80 
[12,] 0.82 0.84 
[13,] 0.86 0.88 
[14,] 0.90 0.92 
[15,] 0.94 0.96 
[16,] 0.98 1.00 

bearbeiten

Die Zählerinformationen für jedes Intervall nur innerhalb der print.shingle Methode berechnet wird. So müssten Sie den folgenden Code auszuführen:

count.shingle = function(x){ 
    l <- levels(x) 
    n <- nlevels(x) 
    int <- data.frame(min = numeric(n), max = numeric(n), 
        count = numeric(n)) 
    for (i in 1:n) { 
    int$min[i] <- l[[i]][1] 
    int$max[i] <- l[[i]][2] 
    int$count[i] <- length(x[x >= l[[i]][1] & x <= l[[i]][2]]) 
    } 

    int 
} 

a = count.shingle(bin_1) 

Das gibt:

> a 
    min max count 
1 0.38 0.40  0 
2 0.42 0.44  1 
3 0.46 0.48  3 
4 0.50 0.52  1 
5 0.54 0.56  2 
6 0.58 0.60  2 
7 0.62 0.64  2 
8 0.66 0.68  4 
9 0.70 0.72  1 
10 0.74 0.76  3 
11 0.78 0.80  2 
12 0.82 0.84  2 
13 0.86 0.88  5 
14 0.90 0.92  1 
15 0.94 0.96  1 
16 0.98 1.00  2 

wo a$min unteren Bereich liegt, a$max oberen Bereich liegt, und a$count ist die Zahl in den Behälter.

+0

Was ist mit der Menge dieses Datenpunkts innerhalb dieser Bins? – Lamda

+0

Count-Informationen werden nur innerhalb der 'print.shingle'-Methode berechnet. – coatless

+0

.... Nun, der Zweck von all dem war, diese Informationen zu extrahieren. Andere Optionen? – Lamda