繁体   English   中英

R-从Reshape2开始广播-按值变量而不是变量名排序

[英]R - dcast from Reshape2 - order by value variable and not variable name

我有以下data.frame命名countries_tools 它由3列组成(日期时间列(过去13个月),名称列(包含国家/地区)和访问次数列(来自那些特定国家/地区的访问者)):

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

请注意,我删除了其他11个月之间的时间。 另请注意,该名称始终是相同5个国家/地区的列表,与上一个分析月份(本例为2017年7月)中访问量较大的五个国家/地区相对应。

在此消息的末尾还有一个dput与我的数据。

为了更好地理解数据和dcast访问的发展,我从dcast进行了广播:

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

但是,结果数据框按国家名称(字母顺序)对列进行排序:

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

顺序是字母顺序,而不是可变值

但是,我希望该顺序由值变量(访问)完成,因此最佳顺序应为:

日期时间,中国,德国,美国,印度,日本

可以做到吗(如果不需要额外的步骤,充其量最好)? 也可以使用其他功能。

数据

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")

您可以将“名称”转换为说明所需级别的有序因子:

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

现在可以正常工作:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM