2012-08-22 16 views
9

Básicamente estoy buscando el producto de un vector y una lista de listas donde el LoL tiene longitudes arbitrarias.¿Cómo transformo un vector y una lista de listas en un data.frame en R?

dose<-c(10,20,30,40,50) 
resp<-list(c(.3),c(.4,.45,.48),c(.6,.59),c(.8,.76,.78),c(.9)) 

puedo conseguir algo muy parecido con

data.frame(dose,I(resp)) 

pero no es del todo bien. Necesito expandir la columna de respuestas de las listas que combinan los valores con la columna de dosis.

El formato deseado es:

10 .3 
20 .4 
20 .45 
20 .48 
30 .6 
30 .59 
40 .8 
40 .76 
40 .78 
50 .9 
+2

Bienvenido al desbordamiento de la pila! +1 para [ejemplo reproducible] (http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example). – Andrie

+0

Solo para estar seguro: 'dose' siempre tiene tantos elementos como elementos de lista en' resp'? Y solo por interés, ¿qué planeas hacer con la matriz de salida? Podríamos sugerir un "atajo" para su último requisito. –

+0

@Carl Sí, los valores de dosis se emparejan con las listas en la lista resp (respuesta). Solo hay un número desconocido de dichos emparejamientos para cada dosis. El data.frame de salida se usa en drm para ajustar una curva de regresión. Estaba haciendo algo así como 'unlist (lapply (resp, mean))' pero aunque esto me da la curva de regresión, causa problemas para 'modelFit()', finalmente encontré que tenía que darle a la regresión los valores en bruto para obtener mis estadísticas de bondad de ajuste, de ahí la necesidad de transformarme en pares crudos de dosis/respuesta. – user1616353

Respuesta

14

Aquí es una solución utilizando rep() y unlist().

  • Uso rep para repetir los elementos de dose, con la longitud de cada elemento de resp.
  • Uso unlist convertir resp en un vector

El código:

data.frame(
    dose = rep(dose, sapply(resp, length)), 
    resp = unlist(resp) 
) 

    dose resp 
1 10 0.30 
2 20 0.40 
3 20 0.45 
4 20 0.48 
5 30 0.60 
6 30 0.59 
7 40 0.80 
8 40 0.76 
9 40 0.78 
10 50 0.90 
+0

Gracias, eso me da exactamente lo que busco. – user1616353

Cuestiones relacionadas