在qplot中使用带有数据框符号的列名

时间:2013-02-17 17:25:55

标签: r dataframe ggplot2

我有一个数据集,不幸的是我的dataframe中的一些列标签包含符号( - 或+)。这似乎不会打扰dataframe,但是当我尝试用qplot绘制它时,它会抛出一个错误:

x <- 1:5
y <- x
names <- c("1+", "2-")

mydf <- data.frame(x, y)
colnames(mydf) <- names
mydf
qplot(1+, 2-, data = mydf)

如果我将列名括在引号中,它只会给我一个类别(或类似的东西,它会给我一个“1+”与“2-”的情节,中间有一个点)。

是否可以轻松完成此操作?我查看了aes_string,但并不太了解它(至少不足以使它工作)。

提前致谢。

P.S。我在网上搜索了一个解决方案但是找不到任何可以帮助我的东西(这可能是由于某些方面我不明白),所以我认为这可能是因为这是一个完全迟钝的命名方案我有:第

2 个答案:

答案 0 :(得分:3)

由于您有非标准列名,因此您需要在列引用中使用反引号(`)。

例如:

mydf$`1+`
[1] 1 2 3 4 5

因此,您的qplot()电话应如下所示:

qplot(`1+`, `2-`, data = mydf)

enter image description here


您可以在?Quotes?names

中找到更多信息

答案 1 :(得分:2)

正如在另一个答案中所说,你有一个问题,因为你没有标准名称。当解决方案是避免backticks符号时,将colnames转换为标准形式。将名称转换为常规名称的另一个动机是,您不能在backticks图中使用lattice。使用gsub即可:

 gsub('(^[0-9]+)[+|-]+|[+|-]+','a\\1',c("1+", "2-","a--"))
[1] "a1" "a2" "aa"

因此,将此应用于您的示例:

 colnames(mydf) <- gsub('(^[0-9]+)[+|-]+|[+|-]+','a\\1',colnames(mydf))
 qplot(a1,a2,data = mydf)

<强> EIDT

您可以使用make.names选项unique = T

 make.names(c("10+", "20-",  "10-", "a30++"),unique=T)
[1] "X10."  "X20."  "X10..1" "a30.."

如果您不喜欢R命名规则,请使用gsubfn

这样的自定义版本
library(gsubfn)
gsubfn("[+|-]|^[0-9]+", 
function(x) switch(x,'+'= 'a','-' ='b',paste('x',x,sep='')),
c("10+", "20-",  "10-", "a30++"))
"x10a"  "x20b"  "x10b" "a30aa"    ## note x10b looks better than X10..1