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-」のプロットが中央に1点表示されます)。

これを簡単に行うことは可能ですか?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を標準形式に変換することです。名前を通常の名前に変換するもう1つの動機は、たとえば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
于 2013-02-17T17:43:13.860 に答える