我有一个数据集,不幸的是我的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。我在网上搜索了一个解决方案但是找不到任何可以帮助我的东西(这可能是由于某些方面我不明白),所以我认为这可能是因为这是一个完全迟钝的命名方案我有:第
答案 0 :(得分:3)
由于您有非标准列名,因此您需要在列引用中使用反引号(`)。
例如:
mydf$`1+`
[1] 1 2 3 4 5
因此,您的qplot()
电话应如下所示:
qplot(`1+`, `2-`, data = mydf)
您可以在?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