R:ggplot bar:显示排序的值,用于变量'确定的列中的值;s值多少?

R:ggplot bar:显示排序的值,用于变量'确定的列中的值;s值多少?,r,ggplot2,R,Ggplot2,在下面的代码段中,为了以条形图的形式绘制数据,使用ggplot按降序绘制值, 我需要使用data.frame对列进行转换,以将列的顺序重新排列为因子。 列名不是常数,而是由输入变量的值,feature.name 我在为专栏表达标签的地方被绊住了 按因子重新排列其顺序:feature.column 当我调用函数时: composite.analysis("product_group", "Winning_Feature", data, "winning", "

在下面的代码段中,为了以条形图的形式绘制数据,使用ggplot按降序绘制值, 我需要使用data.frame对列进行转换,以将列的顺序重新排列为因子。 列名不是常数,而是由输入变量的值,
feature.name

我在为专栏表达标签的地方被绊住了 按因子重新排列其顺序:
feature.column

当我调用函数时:

composite.analysis("product_group", "Winning_Feature", data,
                   "winning", "Winning Feature Popularity",
                   popularity_data)
 composite.analysis("product_group", "Winning_Feature", data, "winning", "Winning Feature Popularity", popularity_data)
我没有明显的错误,但酒吧 图表的值顺序不正确。经过检查,我发现引入了一个新列,名为
“feature.column”
。似乎名为
“winning”
在这种情况下,没有重新排序因子

composite.analysis <- function(simple.var.str, complex.var.str, data, feature.name, feature.ranking.title, 
                               simple.order) {
  # Assume simple.var.str and complex.var.str are passed as strings
    to.study <- select(data, one_of(simple.var.str, complex.var.str))

    # split.vertically returns a new data frame having a column with
    # name as the value of the variable feature.name
  splitted <- split.vertically(to.study, feature.name)

  (eval(substitute(
    {
      # Compute the ranking of feature
      freq <- xtabs(frequency~feature.column, data = splitted)
      freq.sorted <- as.data.frame(freq) %>% arrange(Freq)
      freq.sorted <- transform(freq.sorted, feature.column = factor(feature.column, levels = freq.sorted[, feature.name]))
      #freq.sorted <- data.frame(factor(freq.sorted[, feature.name], levels = freq.sorted[, feature.name]), freq.sorted$Freq)
      rank.p <- ggplot(freq.sorted, aes(feature.column, Freq)) + geom_bar(stat="identity")+ coord_flip() + ggtitle(feature.ranking.title)
      }, list(feature.column = as.name(feature.name)))))
  result <- list(freq.rank = rank.p, freq.sorted = freq.sorted)
  return(result)
  }
我得到了一个错误:

$freq.rank
Error in eval(expr, envir, enclos) : object 'winning' not found
我很高兴能用任何方法来创建带有 降序。我目前的方法只是临时的,从中学习 网络

很抱歉,我无法将我的示例简化为 我很难决定我是否正确地处理了这个问题 整体设计,我可能会使它不必要的困难

简而言之,在我目前的设计中, 我想学习做以下几点:

do.transform.by.variable <- function(df, column.to.change) {
return(transform(df, <some_way_to_represent_column.to.change and changes to it>)
}

do.transform.by.variable这里有一个解决方案适用于me需求:

        composite.analysis <- function(simple.var.str, complex.var.str, data, feature.name, feature.ranking.title, 
                                   simple.order) {
      # Assume simple.var.str and complex.var.str are passed as strings
        to.study <- select(data, one_of(simple.var.str, complex.var.str))

        # split.vertically returns a new data frame having a column with
        # name as the value of the variable feature.name
      splitted <- split.vertically(to.study, feature.name)

      (eval(substitute(
        {
          # Compute the ranking of feature
          freq <- xtabs(frequency~feature.column, data = splitted)
          freq.sorted <- as.data.frame(freq) %>% arrange(Freq)
          # not working this one: freq.sorted <- transform(freq.sorted, feature.column = factor(feature.column, levels = freq.sorted[, feature.name]))
          freq.sorted <- data.frame(factor(freq.sorted[, feature.name], levels = freq.sorted[, feature.name]), freq.sorted$Freq)
          # add the following make it work
          colnames(freq.sorted) <- c(feature.name, "Freq")
          rank.p <- ggplot(freq.sorted, aes(feature.column, Freq)) + geom_bar(stat="identity")+ coord_flip() + ggtitle(feature.ranking.title)
          }, list(feature.column = as.name(feature.name)))))
      result <- list(freq.rank = rank.p, freq.sorted = freq.sorted)
      return(result)
      }
composite.analysis