【问题标题】:How to use column names starting with numbers in ggplot functions如何在ggplot函数中使用以数字开头的列名
【发布时间】:2019-05-27 10:27:10
【问题描述】:

我有一个巨大的数据框,其变量/列名以数字开头,例如 `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")

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")

[可以使用此代码手动生成]

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

任何帮助将不胜感激。

【问题讨论】:

    标签: r function ggplot2 escaping


    【解决方案1】:

    一种方法是结合使用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)
    }
    

    并为groupvalue 传递字符串:

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

    这与您在上面显示的图不同,但它看起来与数据一致。

    【讨论】:

    猜你喜欢
    • 2013-03-16
    • 1970-01-01
    • 2021-12-26
    • 2017-01-05
    • 1970-01-01
    • 2012-11-25
    • 1970-01-01
    • 2014-11-02
    • 1970-01-01
    相关资源
    最近更新 更多