我有这个功能可以满足我的需要-它可以从原始数据中创建一个干净的表,使其成为ggplot,然后使用lapply
在所有我想要的变量中运行它原始表格data
:
#Get colnames of all numeric varaibles
nlist <- names(data[,sapply(data,is.numeric)])
#Create function
varviz_n <- function(dat, var){
var <- dat[,which(names(dat) == var)]
title<-var
tab <- dat %>%
group_by(group = cut(var, breaks = seq(0, max(var), 10)),
groupedsupport) %>%
summarise(n = n()) %>%
mutate(freq = n / sum(n)) %>%
filter(!is.na(group),n>10)
tab2 <- tab %>%
group_by(groupedsupport) %>%
summarise(mean = mean(freq),
median = median(freq))
finaltab <- tab %>% left_join(tab2, by = "groupedsupport")
fplot <- finaltab %>%
ggplot(aes(fill=group,x=groupedsupport,y=freq)) +
geom_col(position="dodge") +
geom_text(aes(label = paste("n =",n), n = (n + 0.05)), position = position_dodge(0.9), vjust = 0, size=2) +
geom_errorbar(aes(groupedsupport, ymax = median, ymin = mean),
size=0.5, linetype = "longdash", inherit.aes = F, width = 1) +
scale_y_continuous(labels = scales::percent) +
xlab("") + ylab("") +
ggtitle(title) +
scale_fill_discrete("")
filename = filename <- paste0(finaltab$var)
ggsave(paste("Plots/",filename,".png"), width = 10, height = 7)
return(fplot)
}
#Run function
lapply(nlist, varviz_n, dat = data)
这几乎完全符合我的要求-问题是它正在运行的所有变量都是0-100数字,并且正在创建绘图,但我完全不知道如何获取列名作为图或键的标题。所以我不知道哪个图形被返回。
有人可以帮助我找出一种方法来从nlist
中获取列名作为我的地块标题吗?现在,它的打印方式将显示列的第一个值,而不是实际的列名:
由于标题/变量未正确填充,因此将其保存在“图”文件夹中的最后一段代码也不起作用。
您可以使用类似的方法来创建data
来测试代码:data <- data.frame(v1 = sample(1:100,1000,replace=T),v2 = sample(1:100,1000,replace=T),v3 = sample(1:100,1000,replace=T),groupedsupport = sample(LETTERS[1:3],1000,replace = TRUE))
谢谢!
答案 0 :(得分:1)
我认为您只需要交换以下步骤:
var <- dat[,which(names(dat) == var)]
title <- var
应该是
title <- var
var <- dat[,which(names(dat) == var)]
var
被分配给选定数据的列,因此当在title
中再次调用它时,它正在查找该向量而不是列名。
如果这不能解决问题,请给我们一些代码来模仿data
的内容。