首页 > 解决方案 > 如何按字符串值的频率对数据进行排序?

问题描述

我制作了一个堆积条形图,但想以我的第一个变量的频率上升的方式排列我的 x 轴。我的数据都是字符串,我有 4 个不同的字符串(字符串 A、字符串 B、字符串 C 和字符串 D)。我一直在尝试让我的堆积条形图按字符串 A 的频率排序,但不知道如何。

我一直在尝试使用 factor() 和 order() 和 name[order()] 但它们都导致了很多错误。

data$variable <- factor(data$variable, levels = data$variable[order(data$val)])

ggplot(data = data, aes(x = variable, y = countofdata, fill = factor(value))) 
+ geom_bar(
stat = "identity")

标签: rggplot2

解决方案


像这样的东西可以解决问题

# generate data
data <- data.frame(variable= factor(c("a", "a", "a", "c", "d", "d")))
# see the order of the levels
data$variable
# [1] a a a c d d
# Levels: a c d

# change factor levels ascending
data$variable <- factor(data$variable, levels = names(sort(table(data$variable))))
# output
data$variable
# [1] a a a c d d
# Levels: c d a
# -> correct order

我无法测试这是否会为您锻炼,因为您没有提供任何数据。下次请这样做(请参阅此处)。

编辑

根据评论编辑

categories <- c("category 3", "category 3", "category 3", "category 2", "category 2", "category 2", "category 1", "category 1", "category 1")
values <- c("A", "B", "C", "A", "A", "A", "A", "A", "C")
data <- cbind.data.frame(categories, values)

tabl <- aggregate(values ~ categories, data, table)
data$categories <- factor(data$categories, levels = as.character(tabl$categories[order(tabl[ , "values"][ , "A"], decreasing= FALSE)]))
data$categories
# Levels: category 3 category 1 category 2

推荐阅读