2016-08-29 9 views
-1

Ich versuche, eine Folge von Werten zu durchlaufen und die Ergebnisse meiner Tabellenzählung in einem separaten Vektor oder einer Matrix zu speichern. Ich bin neu im Programmieren, bitte entschuldige den schlechten Versuch.Tabellenanzahl als Vektor speichern

Hier ist mein Problem:

pred_test <- seq(0, 1, length=1000) 
test$PURCHASER_FLAG <- sample(c(0,1), size=1000, replace= TRUE) 
crit = seq(from=0, to=1, by=.01) 

list <- matrix(0, nrow=101, ncol=2) 

for (i in 1:length(crit)) { 
list[i,] <- as.numeric(table(pred_test >= i, test$PURCHASER_FLAG)[2,]) 

} 

ich Schleife will durch alle Werte von krit und speichere die Ergebnisse der einzelnen zugehörige Tabellenzahl als Folge in einem neuen Vektor ‚Liste‘ genannt. Pred_test ist ein Wahrscheinlichkeits-Score von 0-1 und Käufer-Flag ist die zugehörige Klasse von 0 oder 1. Ich möchte diese Zählungen für jeden zugeordneten kritischen Schwellenwert in crit speichern.

Bitte lassen Sie mich wissen, wenn es einen einfacheren Weg gibt, dies zu tun.

+1

Was ist 'pred_test' und' test $ PURCHASER_FLAG'? Bitte geben Sie ein reproduzierbares Beispiel an – akrun

Antwort

0

Verwenden sapply und sicherzustellen, dass die Abmessungen aller Tabellen, die Sie erzeugen das gleiche (2 x 2) in Ihrem Fall sind:

library(dplyr) 
library(tidyr) 


# generate the data 
df_foo = data_frame(
    pred_test = runif(1000), 
    PURCHASER_FLAG = sample(c(0, 1), size = 1000, replace = TRUE) 
) 

# collect the confusion matrices 
m_confusion = sapply(
    seq(0, 1, .1), function(x) { 
    # straighten out the matrix 
    as.numeric(
     # create the confusion matrix 
     table(
     # ensure that all the levels are always represented 
     factor(
      df_foo$pred_test > x, levels = c("TRUE", "FALSE") 
     ), 
     df_foo$PURCHASER_FLAG 
    ) 
    ) 
    } 
) 

# add some dimnames to the matrix created 
colnames(m_confusion) = seq(0, 1, 0.1) 

# create the rownames from a dummy object 
rownames_confusion = 
    unite(
    expand.grid(
     dimnames(
     table(
      factor(
      df_foo$pred_test > 0.1, levels = c("TRUE", "FALSE")), df_foo$PURCHASER_FLAG 
     ) 
    ) 
    ), rownames, everything() 
)$rownames 

# attach the rownames 
rownames(m_confusion) = rownames_confusion 

# print the final object 
m_confusion 

Das gibt:

> m_confusion 
      0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1 
TRUE_0 510 467 425 376 318 274 210 157 103 52 0 
FALSE_0 0 43 85 134 192 236 300 353 407 458 510 
TRUE_1 490 428 374 326 284 246 205 158 111 54 0 
FALSE_1 0 62 116 164 206 244 285 332 379 436 490 

Ich bin sicher, dass es ist ein einfacher Weg, um die Reihe Dimnamen zu erstellen, aber ich überlasse es Ihnen, um herauszufinden.

Verwandte Themen