2016-07-20 8 views
-1

Ich absteigende Reihenfolge zur Zeit in dplyr arbeiten und neu zu gestalten:How Do I Top 3 Werte Get eher in aufsteigend zu gehen, als in R/dplyr Paket

Die Df Ich habe hat eine Liste von 45 Städten mit über 10 Datenspalten für jede Stadt. Ich möchte die drei kleinsten Werte für jede Stadt/Reihe.

Ich bin in der Lage, sie durch diese zu bekommen:

new_df <- melt(Df) ## giving me the long form of the data 
newer_df2$value2 <- new_df$value * -1 
top3 <- newer_df %>% group_by(City) %>% arrange(value2) %>% top_n(3) 

mir geben zum Beispiel:

City Value 
City 1 -1000 
City 1 -999 
City 1 -998 
city 2 -500 
city 2 -499 
city 2 -498` 

etc ...

So, während dies technisch die Antwort, wäre es viel einfacher, es in der umgekehrten Reihenfolge zu haben, wie unten, also kann ich es als ein csv exportieren, ohne es in Excel zu formatieren.

City Value 
City 1 -998 
City 1 -999 
City 1 -1000 
city 2 -498 
city 2 -499 
city 2 -500` 

** Wenn ich mit -1 multiplizieren nicht, es gibt mir die drei höchsten Werte, sondern in der richtigen Reihenfolge

+1

Ab dplyr 0.5 können Sie die unteren 'n' Werte mit negativen Werten in' top_n' auswählen. Um die niedrigsten 3 Werte von "Wert" zu erhalten, können Sie 'top_n (-3, Wert)' verwenden. – aosmith

+1

Sie haben keinen Blick auf das Dokument für 'arrangieren' geworfen. In der ersten Zeile steht '' Verwenden Sie desc, um eine Variable in absteigender Reihenfolge zu sortieren. '' –

+0

Bei der Multiplikation mit der negativen zur Sortierung müssen Sie das Ergebnis nicht in einer neuen Variablen speichern. 'array (-value)' funktioniert genauso gut wie 'array (desc (value))'. Der 'desc()' Ansatz ist flexibler, da er für nicht-numerische Werte funktioniert. – Gregor

Antwort

0

Ich denke, dass Sie arrangenachtop_n verwenden möchten. Beispiel:

new_df %>% top_n(-3, value) %>% arrange(desc(value)) 
+0

Die -3, wird alle Beobachtungen los. –