2013-02-17 1 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. 온라인으로 솔루션을 검색했지만 꽤 이해가되지 않는 부분이있을 수 있으므로이 문제를 해결하는 데 도움이되는 항목을 찾을 수 없습니다. :피.

답변

2

다른 답변에서 말한 것처럼 표준 이름이 없기 때문에 문제가 발생합니다. 솔루션을 피하는 경우 backticks 표기법은 colnames를 표준 형식으로 변환하는 것입니다. 이름을 정규 이름으로 변환하는 또 다른 동기는 lattice 플롯에서 backticks을 사용할 수 없다는 것입니다. 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을 사용할 수 있습니다 =

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

R n이 마음에 들지 않으면 `이름 (mydf를) 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

을 사용 또는 사용 규칙을 aming, 여기에 사용자 정의 버전 <- make.names (이름 (mydf))', 당신은 살균을 위해 R의 기본 규칙을 사용하여 괜찮다면. –

+1

@BenBolker 우수 !! 아마도'make.names (c ('a +', 'a -'))'와 같은 것을 가지고 있다면 이것은 작동하지 않을 것입니다. – agstudy

+2

예, 솔루션과 함께 실패해도 (= 동일한 열 이름으로 연결됨) ... –

3

표준이 아닌 열 이름이 있으므로 열 참조에 백틱 (`)을 사용해야합니다. 예를 들어

:

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

그래서, 당신의 qplot() 호출은 다음과 같아야합니다

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

enter image description here


당신은 ?Quotes?names

에서 자세한 정보를 찾을 수 있습니다
관련 문제