gpt4 book ai didi

r - 循环遍历数据框的列以使用 ggplot2 创建图

转载 作者:行者123 更新时间:2023-12-01 13:16:27 25 4
gpt4 key购买 nike

我正在努力克服这个问题。不能再进一步了。

我有一个包含因子和数字变量的数据框。此处显示的是前几行和几列。

# A tibble: 6 x 5
cluster SEV_D SEV_M OBS PAN
<int> <dbl> <dbl> <fct> <fct>
1 1 5 1 0 1
2 2 6 1 0 0
3 1 5 1 0 1
4 2 4 2 0 0
5 1 4 1 1 1
6 1 4 2 1 0

cluster=as.factor(c(1,2,1,2,1,1))
SEV_D=as.numeric(c(5,6,5,4,4,4))
SEV_M=as.numeric(c(1,1,1,2,1,2))
OBS=as.factor(c(0,0,0,0,1,1))
PAN=as.factor(c(1,0,1,0,1,0))
data<-data.frame(cluster,SEV_D,SEV_M,OBS,PAN)

我像这样拆分数据框,在数字和因子变量中,在两个子集中保留“集群”,因为我需要它进行分组。

data_fact <- data[, sapply(data, class) == 'factor']

data_cont <- data[, sapply(data, class) == 'numeric' | names(data)
== "cluster"]

以下两段代码将生成我想要的图。

data_fact %>% group_by(cluster,OBS)%>%summarise(total.count=n()) %>% 
ggplot(., aes(x=cluster, y=total.count, fill=OBS)) +
geom_bar(position = 'dodge', stat='identity') +
geom_text(aes(label=total.count),
position=position_dodge(width=0.9), vjust=-0.2)

data_cont %>% group_by(cluster) %>% dplyr::summarise(mean =
mean(SEV_D), sd = sd(SEV_D)) %>%
ggplot(.,aes(x=cluster,y=mean))+geom_bar(position=position_dodge(),
stat="identity",colour="black",size=.3)+geom_errorbar(aes(ymin=mean-
sd, ymax=mean+sd),size=.3,width=.4,position=position_dodge(.4)) +
ggtitle("SEV_D")

我的目标是创建与数据框中的变量一样多的图表,遍历列并将此类图表存储在一张表中。

我的尝试是

col<-names(data_fact)[!names(data_fact)%in%"cluster"]

for(i in col) {
data_fact %>% group_by(cluster,i)%>%summarise(total.count=n()) %>%
ggplot(., aes(x=cluster, y=total.count, fill=i)) + geom_bar(position
= 'dodge', stat='identity') + geom_text(aes(label=total.count),
position=position_dodge(width=0.9), vjust=-0.2)
}

但是它抛出这个错误:

grouped_df_impl(data, unname(vars), drop) 错误: i 列未知

最重要的是,恐怕该代码不会在一张纸上显示所有图表。任何帮助将不胜感激!!!

最佳答案

上面的链接是一个很好的引用。或者查看 Rstudio 的 tidyeval 备忘单:https://github.com/rstudio/cheatsheets/raw/master/tidyeval.pdf

要计算 ggplot 语句中的 i,您需要使用 !!ensym( ) 函数构造取消引用字符串。此外,您还需要使用 print 语句来打印循环内的图。

library(ggplot2)

col<-names(data_fact)[!names(data_fact)%in%"cluster"]

for(i in col) {
print(i)

g<-data_fact %>% group_by(cluster, !!ensym(i)) %>% summarise(total.count=n()) %>%
ggplot(., aes(x=cluster, y=total.count, fill=!!ensym(i))) +
geom_bar(position = 'dodge', stat='identity') +
geom_text(aes(label=total.count), position = position_dodge(width=0.9), vjust=-0.2) +
labs(title=i)
print(g)
}

关于r - 循环遍历数据框的列以使用 ggplot2 创建图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54404535/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com