2012-09-07 15 views
12

Pracuję z wyjściem rozrzedzenia z mothur, które zasadniczo daje mi zestaw danych zawierający liczbę próbkowanych sekwencji i liczbę unikatowych sekwencje w kilku próbkach. Chciałbym użyć ggplot2 do wizualizacji tych danych i dlatego muszę użyć melt, aby przejść z formatu wide do formatu long.Funkcja przekształcania pakietu R błąd topienia: zmienne identyfikatora nie występują w danych podczas pracy z wieloma czynnikami

Problem polega na tym, że nie mogę wykonać tej pracy z powodu błędu melt. Który w zasadzie stanowi

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

Ze względu na rozmiar oryginalnego zbioru danych byłoby impractcal aby go udostępnić tutaj mimo wszystko należy być w stanie odtworzyć ten sam problem przy użyciu następującego kodu:

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) 

co daje dokładnie ten sam błąd:

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

Nie widzę, co robię źle. Używam R 2.15.1 na serwerze Ubuntu 12.04. Zarówno funkcja reshape::melt jak i reshape2::melt powodują ten sam błąd.

Odpowiedz

12

Należy użyć:

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 
... 

Z pomocą ?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

Zatem Twój id.vars argument powinien być wektorem charakter nazwami, np wektor "a" lub numeryczny, np. 1. Długość tego wektora powinna być równa liczbie kolumn, która ma być twoim id.

Zamiast tego użyłeś współczynnika, który zawierał znacznie więcej elementów niż kolumny w Twoich danych.

+0

Dziękuję bardzo za odpowiedź. Użyłem funkcji stopu wcześniej, ale wyraźnie przeoczyłem ją w pomocy. –

+1

@FMKerckhof: Jest to dość powszechny błąd poznawczy. Musisz podać "nazwę" tej kolumny jako drugi argument do stopienia, zamiast podawać wartości w tej kolumnie, co zwraca 'd $ a'. W takim przypadku mógłbyś użyć tylko numeru 1. –