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