2017-08-23 4 views
0

Je dois suivre data.frame nommé countries_tools. Il se compose de 3 colonnes (une colonne datetime (pour les 13 derniers mois), une colonne de nom (avec les pays) et une colonne de visites (personnes visitant la page de ces pays particuliers)):R - dcast à partir de Reshape2 - ordre par variable de valeur et nom non variable

datetime   name   Visits 
2016-07-01 00:00:00 China   5237 
2016-07-01 00:00:00 Germany  1434 
2016-07-01 00:00:00 United States 1530 
2016-07-01 00:00:00 India   696 
2016-07-01 00:00:00 Japan   569 
... 
2017-07-01 00:00:00 China   4484 
2017-07-01 00:00:00 Germany  1593 
2017-07-01 00:00:00 United States 1438 
2017-07-01 00:00:00 India   1204 
2017-07-01 00:00:00 Japan   538 

S'il vous plaît prendre note que j'ai enlevé les 11 autres mois entre les deux. Notez également que ce nom est toujours une liste des mêmes 5 pays, qui correspondent aux cinq pays ayant le plus grand nombre de visites au cours du dernier mois analysé (juillet 2017 dans ce cas).

À la fin de ce message, il y a un dput avec mes données.

Pour mieux comprendre les données et le développement de visites à travers les mois, je fais dcast de mon data.frame:

countries_tools <- dcast(countries_tools, datetime ~ name, value.var="Visits") 

Cependant, les commandes de dataframe résultant des colonnes par le nom du pays (par ordre alphabétique):

> names(countries_tools) 
[1] "datetime"  "China"   "Germany"  "India"   "Japan"   "United States" 

Order is alphabetical, not by variable value

Je pense, cependant, que l'ordre se fait par la variable de valeur (visites) et donc l'ordre optimal doit être:

datetime, Chine, Allemagne, États-Unis, Inde, Japon

Peut-il être fait (au mieux si elle n'est pas nécessaire une étape supplémentaire)? L'utilisation d'autres fonctions est également une possibilité.

données

dput(countries_tools) 
structure(list(datetime = structure(c(1467320400, 1467320400, 
1467320400, 1467320400, 1467320400, 1469998800, 1469998800, 1469998800, 
1469998800, 1469998800, 1472677200, 1472677200, 1472677200, 1472677200, 
1472677200, 1475269200, 1475269200, 1475269200, 1475269200, 1475269200, 
1477951200, 1477951200, 1477951200, 1477951200, 1477951200, 1480543200, 
1480543200, 1480543200, 1480543200, 1480543200, 1483221600, 1483221600, 
1483221600, 1483221600, 1483221600, 1485900000, 1485900000, 1485900000, 
1485900000, 1485900000, 1488319200, 1488319200, 1488319200, 1488319200, 
1488319200, 1490994000, 1490994000, 1490994000, 1490994000, 1490994000, 
1493586000, 1493586000, 1493586000, 1493586000, 1493586000, 1496264400, 
1496264400, 1496264400, 1496264400, 1496264400, 1498856400, 1498856400, 
1498856400, 1498856400, 1498856400), class = c("POSIXct", "POSIXt" 
), tzone = "Europe/Moscow"), name = c("China", "Germany", "United States", 
"India", "Japan", "China", "Germany", "United States", "India", 
"Japan", "China", "Germany", "United States", "India", "Japan", 
"China", "Germany", "United States", "India", "Japan", "China", 
"Germany", "United States", "India", "Japan", "China", "Germany", 
"United States", "India", "Japan", "China", "Germany", "United States", 
"India", "Japan", "China", "Germany", "United States", "India", 
"Japan", "China", "Germany", "United States", "India", "Japan", 
"China", "Germany", "United States", "India", "Japan", "China", 
"Germany", "United States", "India", "Japan", "China", "Germany", 
"United States", "India", "Japan", "China", "Germany", "United States", 
"India", "Japan"), Visits = c(5237, 1434, 1530, 696, 569, 4422, 
1508, 1971, 672, 461, 3993, 1521, 1901, 2027, 517, 3656, 1764, 
1716, 993, 509, 5483, 3117, 2762, 1298, 594, 5548, 2804, 2365, 
1222, 551, 3747, 3083, 1917, 999, 496, 3903, 2136, 1751, 1229, 
611, 5638, 2721, 2074, 1569, 533, 4326, 1618, 1511, 1254, 458, 
4364, 2021, 1690, 1162, 462, 4462, 1572, 1517, 1068, 574, 4484, 
1593, 1438, 1204, 538)), .Names = c("datetime", "name", "Visits" 
), row.names = c(NA, -65L), class = "data.frame") 

Répondre

1

Vous pouvez convertir "nom" à un facteur ordonné indiquant l'ordre que vous voulez pour les niveaux:

countries_tools$name <- ordered(countries_tools$name, levels = unique(countries_tools$name)) 

Maintenant cela fonctionne:

dcast(countries_tools, datetime ~ name, value.var="Visits")