У меня есть эта функция, которая работает близко к тому, что мне нужно - она создает чистую таблицу из моих исходных необработанных данных, делает ее 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))
Спасибо!