2017-02-16 4 views
1

ich bin sicher, dass es eine elegante und schnelle Art und Weise ist eine Datenrahmensäule neben der Verwendung einen der() Anweisung in einer for-Schleife zu füllen ...schnellster Weg zu implementieren, welche

colors = (
    "#D53E4F" "#FC8D59" "#FEE08B" 
    "#FFFFBF" "#E6F598" "#99D594" "#3288BD" 
) 
n = 6277 
wxData = data.frame(
    x = numeric(n - 1), 
    y = numeric(n - 1), 
    z = numeric(n - 1), 
    c = character(n - 1), 
    stringsAsFactors = FALSE 
) 
for (j in 1 : n-1) { 
    wxData$x[j]  = xCoord[[1]][j] #"data.frame" 
    wxData$y[j]  = yCoord[[1]][j] #"data.frame" 
    wxData$z[j]  = dbz[[1]][j]  #"data.frame" 
    colorIndx  = which(wxData$z[j] == colorRanges) 
    wxData$c[j] = colors[colorIndx] 
} 

Entschuldigt, wenn es Ich wurde schon mal gefragt, aber ich habe nachgesehen.

+0

Könnten Sie Beschreiben Sie in Worten, was Ihr Code macht? Es ist eine viel elegantere und schnellere Art der Kommunikation als unkommentierter Code ... Und vielleicht geben Sie Definitionen für die Objekte, die Sie nicht definieren, 'xCoord',' yCoord', 'dbz',' colorRanges'? – Gregor

+0

Ich bin auch verwirrt darüber, warum Sie 'n = 6277' setzen, aber dann immer nur 'n - 1' zu verwenden scheinen ... warum nicht 'n = 6276'? Ich denke jedoch, die Antwort auf Ihre Frage ist "Übereinstimmung". – Gregor

+0

'für (j in 1: n-1)' tut 'für (j in (1: n) - 1)', nicht 'für (j in 1: (n-1))'. Ist das deine Absicht? – nrussell

Antwort

1

Im Allgemeinen angesichts der bereitgestellten Code ist nicht ausführbar, die Schleife über

which(values[j] == array) 

kann

match(values, array) 

Zum Beispiel ohne Schleife mit einer Zeile ersetzt werden:

values = c('a','a','b','c','b','a') 
array = c('a','b','c') 
match(values, array) 

# 1 1 2 3 2 1 
+0

Vielen Dank. –

+0

Gern geschehen. Ich bin ein großer Fan der "Match" -Funktion. –

Verwandte Themen