R中重排序函数的奇怪行为

时间:2018-01-12 16:13:19

标签: r dataframe ggplot2

这个简单的例子演示了重新排序命令的工作原理:

public static String decryptData(final String data, final String password) throws Exception {
        MessageDigest instance=MessageDigest.getInstance("SHA-1");
        byte[] passworddigest=instance.digest(password.getBytes("utf-8"));
        byte[] key=Arrays.copyOf(passworddigest, 24);
        final SecretKeySpec secretKeySpec = new SecretKeySpec(key, "DESede");

        final byte[] decodeddata = Base64.decode(data.getBytes("utf-8"), Base64.DEFAULT);

        final Cipher ciperInstance = Cipher.getInstance("DESede");
        ciperInstance.init(DECRYPT_MODE, secretKeySpec);
        byte[] res= ciperInstance.doFinal(decodeddata);

        return new String(res, "UTF-8");
    }

如果我将相同的语法应用于不同的数据,则重新排序不起作用。见这个例子:

library(ggplot2)    
df <- data.frame(Category = sample(LETTERS), Count = rpois(26, 6))
ggplot(df, aes(reorder(Category, -Count), Count)) + geom_bar(stat = "identity")

第二个例子中的顺序似乎很随机,第一个例子显然是下降的。有什么不同?第二个例子是如何排序的?我无法理解。

1 个答案:

答案 0 :(得分:2)

您的第一个数据框df已经汇总,而mpg则没有汇总。因此,在重新排序因子级别之前,您应首先聚合数据帧,请尝试:

library(dplyr)
mpg <- mpg %>% group_by(manufacturer) %>% summarize(hwy=sum(hwy))
ggplot(mpg, aes(reorder(manufacturer, -hwy), hwy)) + geom_bar(stat = "identity")

希望这有帮助!