3

我有一个数据集,不幸的是,我的某些列标签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 但不太了解它(至少不足以让它工作)。

提前致谢。

PS我已经在网上搜索了一个解决方案,但找不到任何可以帮助我解决这个问题的东西(这可能是由于我不理解的某些方面),所以我认为这可能是因为这是一个完全迟钝的命名方案我有:p。

4

2 回答 2

3

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

例如:

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

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

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

在此处输入图像描述


您可以在?Quotes?names

于 2013-02-17T17:32:14.990 回答
2

如另一个答案所述,您有问题,因为您没有标准名称。避免backticks使用符号的解决方案是将 colnames 转换为标准形式。将名称转换为常规名称的另一个动机是,例如,您不能backtickslattice情节中使用。使用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
于 2013-02-17T17:43:13.860 回答