2012-09-07 11 views
12

Estoy trabajando con una salida de rarefacción de mothur, que básicamente me da un conjunto de datos que contiene el número de secuencias de muestra y el número secuencias en varias muestras. Me gustaría usar ggplot2 para visualizar estos datos y, por lo tanto, necesito usar melt para pasar de un formato wide a uno long.R función de remodelación del paquete error de fusión: variables de identificación no encontradas en datos cuando se trabaja con muchos factores

El problema es que no encuentro forma de hacer que esto funcione debido a un error de melt. Lo que básicamente establece

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

Debido al tamaño de la base de datos original sería impractcal compartirlo aquí, sin embargo, uno debe ser capaz de recrear el mismo problema usando el siguiente código:

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) 

la que da exactamente el mismo error:

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

No veo lo que estoy haciendo mal. Estoy usando R 2.15.1 en el servidor de ubuntu 12.04. Tanto la función reshape::melt como reshape2::melt producen el mismo error.

Respuesta

12

Debe utilizar:

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

De la ayuda de ?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

Así, su argumento id.vars debe ser un vector de caracteres de nombres, por ejemplo, "a" o un vector numérico, p. 1. La longitud de este vector debe ser igual al número de columnas que desee como su id.

En su lugar, utilizó un factor que contenía muchos más elementos de los que tiene columnas en sus datos.

+0

Muchas gracias por su respuesta. He usado la función de fusión antes, pero claramente la he pasado por alto en la ayuda. –

+1

@FMKerckhof: Es un error cognitivo bastante común. Necesitabas proporcionar el "nombre" de esa columna como el segundo argumento para fundir, en lugar de dar los valores en esa columna que es lo que devuelve 'd $ a'. En este caso, podría haber usado solo el número 1. –

Cuestiones relacionadas