Wählen Sie einen Wert für basierend auf einem höchsten Wert in einer anderen Spalte aus

StackOverflow https://stackoverflow.com//questions/10705290

  •  13-12-2019
  •  | 
  •  

Frage

Ich verstehe nicht, warum ich dafür keine Lösung finden kann, da ich denke, dass dies eine ziemlich grundlegende Frage ist.Dann müssen Sie um Hilfe bitten.Ich möchte den Luftqualitätsdatensatz nach Monat mit dem maximalen Temperaturwert für jeden Monat neu anordnen.Außerdem möchte ich für jede monatliche Maximaltemperatur den entsprechenden Tag finden.Was ist der faulste (Code-weise) Weg, dies zu tun?

Ich habe versucht, ohne Erfolg zu folgen:

require(reshape2)
names(airquality) <- tolower(names(airquality))
mm <- melt(airquality, id.vars = c("month", "day"), meas = c("temp"))

dcast(mm, month + day ~ variable, max)
aggregate(formula = temp ~ month + day, data = airquality, FUN = max)

Ich bin nach so etwas:

month day temp
5     7    89
...
War es hilfreich?

Lösung

Es gab eine ziemlich diskutierte ein Weihung, ob faul ist, dass es gut ist oder nicht.Anwyay, dies ist kurz und natürlich, um zu schreiben und zu lesen (und ist schnell für große Daten, sodass Sie es später nicht ändern oder optimieren müssen):

generasacodicetagpre.

.SD ist die Teilmenge der Daten für jede Gruppe, und Sie möchten nur, dass die Zeile mit dem größten Temp, IIUC, iiuc ist.Wenn Sie die Zeilennummer benötigen, kann das hinzugefügt werden.

oder um alle Zeilen zu erhalten, an denen der Max gebunden ist:

generasacodicetagpre.

Andere Tipps

Ein weiterer Ansatz mit der PLYR

generasacodicetagpre.

gibt an,

generasacodicetagpre.

oder sogar einfacher

generasacodicetagpre.

Wie wäre es mit dem generakodicetagcode?

generasacodicetagpre.

Wie Sie sehen, passiert die maximale Temperatur für den Monat auf mehr als einem Tag.Wenn Sie ein anderes Verhalten wünschen, ist die Funktion leicht genug, um sich anzupassen.

Oder wenn Sie das verwenden möchten data.table paket (zum Beispiel, wenn Geschwindigkeit ein Problem ist und der Datensatz groß ist oder wenn Sie die Syntax bevorzugen):

library(data.table)
DT <- data.table(airquality)
DT[, list(maxTemp=max(Temp), dayMaxTemp=.SD[max(Temp)==Temp, Day]), by="Month"]

Wenn Sie wissen wollen, was die .SD steht für, schau mal hier: SO

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top