2012-10-05 26 views
19

Tôi biết nó được ưu tiên nếu tên biến không có khoảng trống trong chúng. Tôi có một tình huống mà tôi cần các biểu đồ chất lượng xuất bản, vì vậy các trục và truyền thuyết cần phải có các nhãn được định dạng đúng cách, ví dụ như các khoảng trắng. Vì vậy, ví dụ, trong sự phát triển có thể tôi đã biến được gọi là "Pct.On.OAC" và Age.Group, nhưng trong cốt truyện chính thức của tôi, tôi cần "% trên OAC" và "Nhóm Tuổi" xuất hiện:Làm thế nào để đối phó với không gian trong tên cột?

'data.frame': 22 obs. of 3 variables: 
$ % on OAC   : Factor w/ 11 levels "0","0.1-9.9",..: 1 2 3 4 5 6 7 8 9 10 ... 
$ Age Group   : Factor w/ 2 levels "Aged 80 and over",..: 1 1 1 1 1 1 1 1 1 1 ... 
$ Number of Practices: int 47 5 33 98 287 543 516 222 67 14 ... 

Nhưng khi tôi cố gắng vẽ chúng:

ggplot(dt.m, aes(x=`% on OAC`,y=`Number of Practices`, fill=`Age Group`)) + 
    geom_bar() 
) 

không có vấn đề gì với điều đó. Nhưng khi tôi thêm một khía cạnh:

ggplot(dt.m, aes(x=`% on OAC`,y=`Number of Practices`, fill=`Age Group`)) + 
    geom_bar() + 
    facet_grid(`Age Group`~ .) 

tôi nhận được Error in [.data.frame (base, names(rows)) : undefined columns selected

Nếu tôi thay đổi Age Group-Age.Group sau đó nó hoạt động tốt, nhưng như tôi đã nói, tôi không muốn chấm để xuất hiện trong chú giải tiêu đề.

Vì vậy, câu hỏi của tôi là:

  1. Có một cách giải quyết cho các vấn đề với các khía cạnh?
  2. Có cách tiếp cận chung nào tốt hơn để giải quyết vấn đề về khoảng trống (và các ký tự khác) trong các tên biến khi tôi muốn cốt truyện cuối cùng đưa chúng vào không? Tôi cho rằng tôi có thể tự mình vượt qua chúng, nhưng điều đó có vẻ như rất nhiều faffing xung quanh.
+0

Sử dụng scale_fill (name = "Nhóm tuổi") hoặc tương tự. – mnel

+0

@mnel xin lỗi, tôi không theo dõi bạn - cách này giải quyết vấn đề với facet_grid? Tôi sử dụng 'scale_fill (name =" Age Group ")' _instead_? –

Trả lời

14

Đây là một "lỗi" trong gói ggplot2 rằng xuất phát từ thực tế là các chức năng as.data.frame() trong hàm ggplot2 nội quoted_df chuyển đổi tên để cú pháp tên hợp lệ. Không thể tìm thấy các tên hợp lệ cú pháp này trong khung dữ liệu gốc, do đó, lỗi này.

Để nhắc nhở bạn:

tên cú pháp hợp lệ bao gồm chữ cái, số và dấu chấm hoặc ký tự gạch dưới, và bắt đầu bằng chữ cái hoặc dấu chấm (nhưng dấu chấm không thể được theo sau bởi một số)

Có lý do cho điều đó.Ngoài ra còn có một lý do tại sao ggplot phép bạn thiết lập nhãn sử dụng labs, ví dụ như sử dụng các dữ liệu giả sau đây với tên hợp lệ:

X <-data.frame(
    PonOAC = rep(c('a','b','c','d'),2), 
    AgeGroup = rep(c("over 80",'under 80'),each=4), 
    NumberofPractices = rpois(8,70) 
) 

Bạn có thể sử dụng phòng thí nghiệm ở cuối để làm cho mã này làm việc

ggplot(X, aes(x=PonOAC,y=NumberofPractices, fill=AgeGroup)) + 
    geom_bar() + 
    facet_grid(AgeGroup~ .) + 
    labs(x="% on OAC", y="Number of Practices",fill = "Age Group") 

Để sản xuất

enter image description here

+1

PS: Khi @DirkEddelbuettel chỉ ra, hãy bỏ qua hàm 'as.data.frame' sử dụng hàm' make.names() 'nội bộ để" sửa "các tên đó (tức là tạo các mã định danh hợp lệ). –

20

Bạn hỏi "Có một cách tiếp cận chung tốt hơn để đối phó với các vấn đề về không gian (và các nhân vật khác) trong tên biến" và có có một vài:

  • Chỉ cần không sử dụng chúng như mọi thứ sẽ phá vỡ như bạn đã trải nghiệm ở đây
  • Sử dụng chức năng make.names() để tạo tên an toàn; điều này cũng được R sử dụng để tạo mã định danh (ví dụ: bằng cách sử dụng dấu gạch dưới cho dấu cách vv)
  • Nếu bạn phải, hãy bảo vệ mã định danh không an toàn bằng dấu gạch chéo ngược.

Ví dụ cho hai điểm cuối cùng:

R> myvec <- list("foo"=3.14, "some bar"=2.22) 
R> myvec$'some bar' * 2 
[1] 4.44 
R> make.names(names(myvec)) 
[1] "foo"  "some.bar" 
R> 
+0

có, nhưng trong trường hợp này (bởi vì ggplot thực hiện một số đánh giá bổ sung), bảo vệ với backticks không hoạt động, vì vậy chúng tôi trở lại điểm của bạn # 1 ... –

+0

Chắc chắn, vì không thể (dễ dàng) thay đổi tất cả các gói khác . Có một lý do tôi xếp chúng theo cách tôi đã làm. Backticks là phương sách cuối cùng. –

Các vấn đề liên quan