Как я могу зациклить имена столбцов в качестве заголовков сюжетов вместе с данными, используя lapply в R? - PullRequest
0 голосов
/ 06 июня 2019

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

Exactly the graph I want with no title

Последний фрагмент кода для его сохранения в папке «Графики» также не работает, так как заголовок / переменная заполняется неправильно.

Вы можете использовать что-то подобное для создания 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))

Спасибо!

1 Ответ

1 голос
/ 07 июня 2019

Я думаю, что вам просто нужно поменять местами эти шаги:

var <- dat[,which(names(dat) == var)]
title <- var

должно быть

title <- var
var <- dat[,which(names(dat) == var)]

var назначено столбцу выбранных данных, поэтому при повторном вызовев title он смотрит на этот вектор, а не на имя столбца.

Если это не решает проблему, пожалуйста, дайте нам некоторый код для имитации содержимого data.

...