2013-02-17 148 views
3

我有一个数据集,不幸的是我的dataframe中的一些列标签包含符号( - 或+)。这似乎并不理会dataframe,但是当我尝试绘图这跟qplot它将引发我一个错误:在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.我在网上搜索了一个解决方案,但无法找到任何有助于我的事情(这可能是由于某些方面我不明白),所以我认为这可能是因为这是一个完全延迟的命名方案,我有:p。

回答

2

正如在另一个答案中所说,你有一个问题,因为你没有标准名称。当解决方案要避免backticks表示法是将colnames转换为标准形式。将姓名转换为常规姓名的另一个动机是,例如,您不能在lattice情节中使用backticks。因此

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

,将其应用到您的例子:使用gsub你可以做到这一点

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

EIDT

可以使用make.names与选项唯一= T

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

如果你不喜欢R n阿明的规则,这里的定制版本使用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 
+1

或使用'名字(是myDF)< - make.names(名称(myDF上))',如果你不介意的话,使用R的默认规则,这样的消毒。 – 2013-02-17 17:47:02

+1

@BenBolker优秀!!如果他有类似'make.names(c('a +','a - '))'的话,这可能不起作用。 – agstudy 2013-02-17 17:49:40

+2

是的,虽然这失败(=导致相同的列名称)与您的解决方案以及... – 2013-02-17 17:52:34

3

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

例如:

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

所以,你qplot()电话应该是这样的:

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

enter image description here


可以在?Quotes?names

找到更多的信息
相关问题