2012-09-07 17 views
12

Tôi đang làm việc với một kết quả hiếm hoi từ mothur, về cơ bản cung cấp cho tôi tập dữ liệu chứa số chuỗi được lấy mẫu và số lượng duy nhất trình tự trong một số mẫu. Tôi muốn sử dụng ggplot2 để trực quan hóa dữ liệu này và do đó cần phải sử dụng melt để chuyển từ một định dạng wide sang định dạng long.Chức năng định dạng lại gói R bị lỗi: biến id không tìm thấy trong dữ liệu khi làm việc với nhiều yếu tố

Vấn đề là tôi không tìm được cách nào để thực hiện công việc này do lỗi của melt. Mà cơ bản khẳng định

Error: id variables not found in data: 1,3,6, (... and so on)

Do kích thước của tập dữ liệu ban đầu nó sẽ là impractcal để chia sẻ nó ở đây dù sao ta nên có khả năng tái tạo cùng một vấn đề bằng cách sử dụng đoạn mã sau:

a<-seq(0,300,3) 
b<-runif(length(a)) 
c<-runif(length(a)) 
d<-as.data.frame(cbind(a,b,c)) 
d$a<-as.factor(d$a) 
melt(d,d$a) 

mà cung cấp cho chính xác cùng một lỗi:

Error: id variables not found in data: 0,3,6,9, (...)

Tôi không thấy những gì tôi đang làm sai. Tôi đang sử dụng R 2.15.1 trên máy chủ ubuntu 12.04. Cả hàm reshape::meltreshape2::melt dẫn đến cùng một lỗi.

Trả lời

12

Bạn nên sử dụng:

melt(d, id.vars="a") 
     a variable  value 
1  0  b 0.019199459 
2  3  b 0.693699677 
3  6  b 0.937592641 
4  9  b 0.299259963 
5 12  b 0.485403439 
... 

Từ sự giúp đỡ của ?melt.data.frame:

data
data frame to melt

id.vars
vector of id variables. Can be integer (variable position) or string (variable name)If blank, will use all non-measured variables

Như vậy lập luận id.vars của bạn nên là một vector đặc trưng của tên, ví dụ "a" hoặc vectơ số, ví dụ: 1. Độ dài của vectơ này phải bằng số cột bạn muốn làm id.

Thay vào đó, bạn đã sử dụng một yếu tố có chứa nhiều yếu tố hơn bạn có các cột trong dữ liệu của mình.

+0

Cảm ơn bạn rất nhiều vì câu trả lời của bạn. Tôi đã sử dụng chức năng tan chảy trước nhưng rõ ràng đã bỏ qua nó trong sự giúp đỡ. –

+1

@FMKerckhof: Đó là một lỗi nhận thức khá phổ biến. Bạn cần cung cấp "tên" của cột đó làm đối số thứ hai để làm tan chảy, thay vì đưa ra các giá trị trong cột đó là cái mà 'd $ a' trả về. Trong trường hợp này, bạn có thể chỉ sử dụng số 1. –

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