Как использовать имена столбцов, начинающиеся с цифр, в функциях ggplot - PullRequest
0 голосов
/ 30 декабря 2018

У меня огромный массив данных, чьи имена переменных / столбцов начинаются с числа, такого как `1_variable`.Сейчас я пытаюсь создать функцию, которая может принимать имена столбцов в качестве аргументов, чтобы затем построить несколько коробочных диаграмм с помощью ggplot.Однако мне нужна строка, но также необходимо использовать ее ввод с ``, чтобы использовать аргументы в ggplot.Однако я не уверен, как экранировать символьную строку, такую ​​как «1_variable», чтобы дать ggplot ввод «1_variable».

маленький воспроизводимый пример:

dfx = data.frame(`1ev`=c(rep(1,5), rep(2,5)), `2ev`=sample(10:99, 10), 
             `3ev`=10:1, check.names = FALSE)

Если бы я рисовал фигуру вручную, ввод был бы похож на это:

 dfx$`1ev` <- as.factor(dfx$`1ev`)
 ggplot(dfx, aes(x = `1ev`, y = `2ev`))+
   geom_boxplot()

функция, которую я хотел бычтобы иметь возможность работать для фрейма данных это:

plot_boxplot <- function(data, group, value){
    data = data[c(group, value)]
    data[,group] = as.factor(data[,group])
    plot <- ggplot(data, aes(x = group, y = value))+
    geom_boxplot() 
    return(plot)
}

1.Попробуйте

plot_boxplot(dfx, `1ev`, `2ev`)

, который дает мне ошибку, говорящую Error in [.data.frame(data, c(group, value)) : object '1ev' not found

2.Попытка

ввода аргументов с двойными кавычками "" неожиданно дает мне следующее:

plot_boxplot(dfx, "1ev", "2ev")

unexpected output

3.Попробуйте Я также пытался заменить двойные кавычки строки на gsub в функции

gsub('\"', '`', group)

, но это ничего не меняет при выводе.

4.Попробуйте

, наконец, я также попытался использовать aes_string, но это просто дает мне те же ошибки.

plot_boxplot <- function(data, group, value){
   data = data[c(as.character(group), as.character(value))]
   data[,group] = as.factor(data[,group])
   plot <- ggplot(data, aes_string(x= group, y=value))+
     geom_boxplot() 
   return(plot)    
}

plot_boxplot(dfx, `1ev`, `2ev`)

plot_boxplot(dfx, "1ev", "2ev")

В идеале я хотел бы запустить функцию для получения этого вывода:

plot_boxplot(dfx, group = "1ev", value = "2ev")

expected output

[можно получить с помощью этого кодавручную]

ggplot(dfx, aes(x= `1ev`, y=`2ev`)) +
  geom_boxplot() 

Любая помощь будет принята с благодарностью.

1 Ответ

0 голосов
/ 30 декабря 2018

Один из способов сделать это - комбинация aes_ и as.name():

plot_boxplot <- function(data, group, value){
    data = data[c(group, value)]
    data[,group] = as.factor(data[,group])

    plot <- ggplot(data, aes_(x= as.name(group), y=as.name(value))) +
      geom_boxplot()

    return(plot)
}

и передача строк для group и value:

plot_boxplot(dfx, "1ev", "2ev")

enter image description here

Это не тот график, который вы показываете выше, но он выглядит в соответствии с данными.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...