Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何通过引用dplyr管道中的data.frame变量。以编程方式? 库(ggplot2) 图书馆(dplyr) 图书馆(比例尺) 数据% 分组人(主题名)%>% 总结(n=n())%>% 变异(频率=n/和(n))%>% #下一行# ggplot(,aes(x=重新排序(主题名称,描述(频率)),y=频率))+ 几何图形栏(stat=“identity”)+ 连续缩放(标签=百分比)_R_Ggplot2_Dplyr - Fatal编程技术网

如何通过引用dplyr管道中的data.frame变量。以编程方式? 库(ggplot2) 图书馆(dplyr) 图书馆(比例尺) 数据% 分组人(主题名)%>% 总结(n=n())%>% 变异(频率=n/和(n))%>% #下一行# ggplot(,aes(x=重新排序(主题名称,描述(频率)),y=频率))+ 几何图形栏(stat=“identity”)+ 连续缩放(标签=百分比)

如何通过引用dplyr管道中的data.frame变量。以编程方式? 库(ggplot2) 图书馆(dplyr) 图书馆(比例尺) 数据% 分组人(主题名)%>% 总结(n=n())%>% 变异(频率=n/和(n))%>% #下一行# ggplot(,aes(x=重新排序(主题名称,描述(频率)),y=频率))+ 几何图形栏(stat=“identity”)+ 连续缩放(标签=百分比),r,ggplot2,dplyr,R,Ggplot2,Dplyr,如何以编程方式引用主题名?我可以做$THEME\u NAME,但我想称之为[1]或选择(,1)或类似的东西 原因是我想在更大的上下文中使用这个管道——比如通过这个管道传递一堆因子变量。类似于:vars.to.plot就我所知,这必须分三部分完成。我发现有一些局限性,如果我错了,我会很感激有人纠正 library(ggplot2) library(dplyr) library(scales) data <- data.frame(THEME_NAME = c(rep("A", 10), r

如何以编程方式引用主题名?我可以做
$THEME\u NAME
,但我想称之为
[1]
选择(,1)
或类似的东西


原因是我想在更大的上下文中使用这个管道——比如通过这个管道传递一堆因子变量。类似于:
vars.to.plot就我所知,这必须分三部分完成。我发现有一些局限性,如果我错了,我会很感激有人纠正

library(ggplot2)
library(dplyr)
library(scales)

data <- data.frame(THEME_NAME = c(rep("A", 10), rep("B", 20), rep("C", 15)))

data %>%
  group_by(THEME_NAME) %>%
  summarise(n = n()) %>%
  mutate(freq = n / sum(n)) %>%
  # THE NEXT LINE !!! #
  ggplot(., aes(x = reorder(THEME_NAME, desc(freq)), y = freq)) +
    geom_bar(stat="identity") +
    scale_y_continuous(labels=percent)
但对于接受字符串的版本,级别保持不变:

mutate(THEME_NAME = factor(THEME_NAME, levels=unique(THEME_NAME)))

因此,您需要设置一个变量来保存分组变量的名称,因为在调用
summary()
之后,
tbl\u df
对象中不会保留“group by”变量信息。你可以这样做

s_mutate(my_var = factor(my_var, levels = unique(my_var)))

这不需要

这里分享的想法很有用,但这就是我最终实际做的:

data %>%
  group_by(THEME_NAME) %>%
  summarise(n = n()) %>%
  mutate(freq = n / sum(n)) %>%
  {ggplot(., eval(substitute(aes(x=reorder(X, desc(freq)), y=freq), list(X=as.name(names(.)[1])))))  +
    geom_bar(stat="identity") +
    scale_y_continuous(labels=percent)}
库(ggplot2)
图书馆(dplyr)
图书馆(比例尺)

对于初学者来说,
ggplot(,aes_string(x=names(.)[1L],y=“freq”)
的数据是有效的,但是我还没有弄清楚如何将它与
ggplot
内部的
重新排序一起使用。谢谢@docendodiscimus+1-我想得越多,我觉得有更好的方法;可能是某个东西先输出一个列表,然后
do
do.call
lappy
。我可能会调整这个例子来详细说明另一个因子变量。+1,我最终会将此标记为已回答,但我很好奇是否有其他人能想出更优雅的方法。我只是添加了一个替代方法,它选择第一列而不是使用变量。是的,看到了,这是一个不错的选择,但是“未来的我”如果我稍后阅读该代码,可能会丢失。如果您仍然在那里,请查看上面更详细的示例,该示例并非100%有效,但它抓住了问题的核心,并引入了更多问题,即不打印
ggplot
对象,但我们正在脱离主题…嗯,默认情况下不会打印循环中的对象,因此需要显式调用
print()
。不确定您可能还有哪些其他问题。
varname<-"THEME_NAME"

data %>%
  group_by_(varname) %>%
  summarise(n = n()) %>%
  mutate(freq = n / sum(n)) %>%
  ggplot(eval(bquote(aes(x=reorder(.(as.name(varname)), desc(freq)), y=freq)))) +
    geom_bar(stat="identity") +
    scale_y_continuous(labels=percent)
data %>%
  group_by(THEME_NAME) %>%
  summarise(n = n()) %>%
  mutate(freq = n / sum(n)) %>%
  {ggplot(., eval(substitute(aes(x=reorder(X, desc(freq)), y=freq), list(X=as.name(names(.)[1])))))  +
    geom_bar(stat="identity") +
    scale_y_continuous(labels=percent)}
library(ggplot2)
library(dplyr)
library(scales)

data <- data.frame(THEME_NAME   = c(rep("A", 10), rep("B", 20), rep("C", 15)),
                   THEME_NAME_2 = c(rep("E", 5), rep("F", 40)),
                   Non_Factor   = 1:45)

factor.vars <- sapply(data, is.factor)
varnames    <- names(data)[factor.vars]

myReorder <- function(x) {
  factor(x, levels=names(sort(table(x), decreasing=TRUE)))
}


for (i in seq_along(varnames)) {
  data[, varnames[i]] <- myReorder(data[, varnames[i]])
}


for (i in seq_along(varnames)) {
  print(ggplot(data, aes_string(x = varnames[i], y = "..count../sum(..count..)")) + 
          geom_histogram())
}