2013-06-20 36 views
13

Câu hỏi rất cơ bản ở đây vì tôi mới bắt đầu sử dụng R, nhưng tôi đang cố gắng tạo một cốt truyện có tính hệ số trong ggplot2 và khi vẽ đồ thị, nhận được 14 đốm màu nhỏ thể hiện mức thực tế của tôi và sau đó một thanh màu xám lớn ở cuối đại diện cho các NA-5000 trong mẫu (đó là dữ liệu khảo sát từ một câu hỏi chỉ áp dụng cho khoảng 5% của mẫu). Tôi đã thử mã sau đây để không có kết quả:Loại bỏ NA từ một ggplot

ggplot(data = MyData,aes(x= the_variable, fill=the_variable, na.rm = TRUE)) + 
    geom_bar(stat="bin") 

Việc thêm đối số na.rm ở đây không có tác dụng rõ ràng.

Trong khi đó

ggplot(data = na.omit(MyData),aes(x= the_variable, fill=the_variable, na.rm = TRUE)) + 
    geom_bar(stat="bin") 

mang lại cho tôi

"Error: Aesthetics must either be length one, or the same length as the data"

như không dán các na.omit() để the_variable, hoặc cả hai MyData và the_variable.

Tất cả những gì tôi muốn làm là loại bỏ thanh NA khổng lồ khỏi biểu đồ của tôi, ai đó có thể giúp tôi làm điều này không?

+2

Nó thực sự không thể giúp đỡ mà không có dữ liệu của bạn. Bạn cần cung cấp [ví dụ nhỏ] (http://stackoverflow.com/q/5963269/324364) mà chúng tôi có thể thực sự chạy, vì vậy chúng tôi có thể xem xét cấu trúc dữ liệu thực tế của bạn. – joran

+2

Nếu không thấy dữ liệu của bạn, bạn có thể chỉ được đặt dưới dạng giá trị không phải NA cho mục đích vẽ đồ thị. Tức là 'MyData.sub <- MyData [! Is.na (MyData)]', sau đó chỉ vẽ lô con. Tôi thường làm một cái gì đó tương tự để loại bỏ số không. – dayne

+0

Nó sẽ làm việc để chỉ refactor biến điền của bạn? 'fill = factor (the_variable)' –

Trả lời

16

Bạn có thể sử dụng tập con chức năng bên trong ggplot2. Hãy thử điều này

library(ggplot2) 

data("iris") 
iris$Sepal.Length[5:10] <- NA # create some NAs for this example 

ggplot(data=subset(iris, !is.na(Sepal.Length)), aes(x=Sepal.Length)) + 
geom_bar(stat="bin") 
+0

Thật không may, 'iris' không có NA.) – ikashnitsky

+0

bây giờ. Cảm ơn những người đứng đầu lên :) –

+0

Ha! Đó là một cách tốt đẹp để xử lý các bình luận)) Tôi đoán, đối với hầu như mọi trường hợp có một tập dữ liệu phù hợp [từ R được xây dựng trong những người thân] (https://vincentarelbundock.github.io/Rdatasets/datasets.html) – ikashnitsky

0

Từ quan điểm của tôi này lỗi "Lỗi: Thẩm mỹ hoặc là phải chiều dài một, hoặc chiều dài tương tự như các dữ liệu" đề cập đến aes luận (x, y) Tôi đã thử các na.omit() và làm việc tốt với tôi.

1

Chỉ cần cập nhật câu trả lời của @ rafa.pereira. Vì ggplot2 là một phần của tidyverse, nên sử dụng các chức năng gọn gàng thuận tiện để loại bỏ các NA.

library(tidyverse) 
airquality %>% 
     drop_na(Ozone) %>% 
     ggplot(aes(x = Ozone))+ 
     geom_bar(stat="bin") 

Lưu ý rằng bạn cũng có thể sử dụng drop_na() không có thông số cột; sau đó tất cả các hàng có NA trong bất kỳ cột nào sẽ bị xóa.

2

Không chắc chắn nếu bạn đã giải quyết được sự cố. Đối với vấn đề này, bạn có thể sử dụng chức năng "bộ lọc" trong gói dplyr. Ý tưởng là lọc các quan sát/hàng có giá trị của biến mà bạn quan tâm không phải là NA. Tiếp theo, bạn tạo biểu đồ với các quan sát được lọc này. Bạn có thể tìm thấy mã của tôi bên dưới và lưu ý rằng tất cả tên của khung dữ liệu và biến được sao chép từ lời nhắc của câu hỏi của bạn. Ngoài ra, tôi giả sử bạn biết các nhà khai thác đường ống.

library(tidyverse) 

MyDate %>% 
    filter(!is.na(the_variable)) %>% 
    ggplot(aes(x= the_variable, fill=the_variable)) + 
     geom_bar(stat="bin") 

Bạn sẽ có thể xóa các NA gây phiền nhiễu trên cốt truyện của mình. Hy vọng công trình này :)

+0

Cảm ơn, Gregor. Tôi đã sửa mã. –

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